Batch Zmień nazwę plików w folderze

10

Jak mogę usunąć część tekstu z nazw plików w folderze?

Obecnie próbuję:

rename s/"NEWER_(.*?)"//g *

Ale nic się nie zmienia

Mam folder nadrzędny z kilkoma podfolderami, w których znajdują się pliki, które według OneDrive byłyby świetnym pomysłem, aby dołączyć „(NEWER_timestamp)” i chciałbym je usunąć.

Przykładowe nazwy plików:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)
Kevin
źródło
2
Czy możesz podać przykładową nazwę pliku?
muru
pewnie. zaktualizowałem pytanie z niektórymi
Kevin

Odpowiedzi:

8

Spróbuj wykonać następujące czynności:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • Wszystkie [^/]*(.*) .*$pasują tylko do ostatniej części ścieżki, która nie zawiera /. I
  • W powyższym wyrażeniu regularnym (.*)jest grupa pasująca do wszystkiego po ostatniej /i przed spacją . Jego odniesieniem będzie $1.
  • .*$dopasowuje wszystko do końca $nazwy pliku po spacji.
  • Wreszcie w zastępczej części zmiany nazwy s/.../REPLACEMENT/po prostu zachowaliśmy dopasowaną grupę, która znajduje się pomiędzy ostatnią, \a spacją, (.*)która jest znana jako grupa dopasowań.
αғsнιη
źródło
2

Powinieneś rozważyć użycie cudzysłowów poza wyrażeniem regularnym (wewnątrz są traktowane dosłownie jako cudzysłowy) i uciec (. Próbować;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

Precyzja wyrażenia może nie być konieczna, ale nie można być zbyt ostrożnym przy modyfikowaniu plików.

muru
źródło
wszystko, co to robi, to zawieszenie się reading filenames from STDIN, jestem już w folderze nadrzędnym, w którym znajdują się wszystkie te pliki
Kevin
@Kevin „Jeśli w wierszu poleceń nie podano żadnych nazw plików, nazwy plików zostaną odczytane przez standardowe wejście.” A ponieważ skorupa opuszcza się *NEWER*tak, jak jest, jeśli nie znaleziono żadnych rozszerzeń, musiałeś popełnić błąd lub używasz powłoki, która zastąpiła niezrównaną symbol wieloznaczny niczym.
muru
skopiowane i wklejone do powłoki Ubuntu 14.10
Kevin