Chcę zmienić nazwę wielu plików w tym samym katalogu przy użyciu skryptów Bash. Nazwy plików są następujące:
file2602201409853.p
file0901201437404.p
file0901201438761.p
file1003201410069.p
file2602201410180.p
Chcę zmienić nazwę na następujący format:
file2503201409853.p
file2503201437404.p
file2503201438761.p
file2503201410069.p
file2503201410180.p
Czytałem o poleceniu zmiany nazwy i próbowałem to zrobić w ten sposób, ale to nic nie robi, myślę, że mam pytania dotyczące składni. Następnie przeczytałem, że można wykonać pętlę za pomocą polecenia mv w następujący sposób:
for file in cmpsms*2014*.p; do
mv "$file" "${file/cmpsms*2014*.p/cmpsms25032014*.p}"
done
Ale nie mogę zmienić nazwy plików. Co ja robię źle?
*
?Odpowiedzi:
Miałeś rację, rozważając zmianę nazwy w pierwszej kolejności. Składnia jest trochę dziwna, jeśli nie jesteś przyzwyczajony do wyrażeń regularnych, ale jest to zdecydowanie najszybsza / najkrótsza droga, gdy wiesz, co robisz:
To po prostu pasuje do pierwszych 4 liczb i zamienia je na te, które określiłeś.
I uprząż testowa (
-vn
oznacza mówienie, ale nic nie rób ) przy użyciu nazw plików:źródło
rename
jest zupełnie innym narzędziem do zmiany nazw plików (które dostarcza Debianrename.ul
).rename
jak debian.To powinno załatwić sprawę:
Zastępuje ciąg między czwartym i dwunastym znakiem „25032014”.
źródło
for f in file*; do mv $f ${f/${f:4:4}/2503}; done
też działa.for f in *Huge*; do mv $f ${f/Huge/Monstrous}; done
to naprawdę odpowiedź @ Erica z góry - ale jest to elegancka odpowiedź, więc zamieszczam ją jako właściwą odpowiedź, aby zwrócić na to większą uwagę.
źródło
To powinno załatwić sprawę. Uwaga - nie mam w zwyczaju wydawania poleceń mv - jak napisano, to tylko echo. Musisz to rozwiązać, zanim to zadziała.
źródło
Prosty natywny sposób na zrobienie tego bez zapętlania, z przechodzeniem do katalogu :
Zmieni nazwę każdego pliku na miejscu.
A poniżej działający przykład z równoległością :
źródło
find -type f -name "file*.p" | parallel 'ext="{}" ; mv -- {} ${ext:0:4}2503${ext:8}'
Jeśli uważasz, że często tego rodzaju rzeczy robisz, poszukaj „rename.pl”. Jest to skrypt perla, ale pozwala po prostu podać mu kod perla (np. Jako wyrażenie ///), i zmieni masową nazwę na podstawie tego wyrażenia lub kodu.
Jest tutaj podstawowa wersja: http://stackoverflow.org/wiki/Rename.pl, ale istnieją inne wersje unoszące się w sieci. To było od wieków, wieków i wieków.
źródło