W odpowiedzi na moje poprzednie pytanie , czy mam wiele plików formularza
sw.ras.001
sw.ras.002
sw.ras.003
…
Jakiego polecenia mogę użyć, aby usunąć ras.
środek wszystkich plików?
W odpowiedzi na moje poprzednie pytanie , czy mam wiele plików formularza
sw.ras.001
sw.ras.002
sw.ras.003
…
Jakiego polecenia mogę użyć, aby usunąć ras.
środek wszystkich plików?
ras
, czyli skończy sięsw..001
, alboras.
pozostawiającsw.001
?\.
we wzorach.Odpowiedzi:
Możesz to zrobić za pomocą dość małej modyfikacji którejkolwiek z odpowiedzi z ostatniego pytania:
lub
Wyjaśnienie:
rename
jestperl
skryptem, który przyjmujeperl
wyrażenie regularne i listę plików, stosuje po kolei wyrażenie regularne do nazwy każdego pliku i zmienia nazwę każdego pliku w wyniku zastosowania wyrażenia regularnego. W naszym przypadkuras
jest dopasowany dosłownie i\.
pasuje do literału.
(jako.
jedyny wskazuje dowolny znak inny niż nowy wiersz) i zastępuje go niczym.for
Pętla wykonuje wszystkie pliki, które rozpoczynają sięsw.ras.
(standardowe powłoki glob) i pętle nad nimi.${var/search/replace}
wyszukiwania$var
dlasearch
i zastępuje pierwszego wystąpienia zreplace
, więc${file/ras./}
powraca$file
z pierwszymras.
usunięte. Polecenie zmienia więc nazwę pliku na tę samą nazwę minusras.
. Zauważ, że przy tym wyszukiwaniu i zamianie.
jest traktowany dosłownie, a nie jako znak specjalny.źródło
Inną opcją jest użycie mmv (Mass MoVe i zmiana nazwy):
Nie zapomnij użyć pojedynczych cudzysłowów wokół wzorów, w przeciwnym razie gwiazdy zostaną rozszerzone na poziomie skorupy.
Narzędzie nie zawsze jest dostępne, ale jeśli nie, możesz je zainstalować za pomocą:
Zobacz stronę podręcznika tutaj .
źródło
W każdym powłoki POSIX (
bash
,dash
,ksh
, etc.)Lub z
rename
:źródło
Ostatnio musiałem masowo zmienić nazwę wielu plików, w których musiałem zastąpić ostatnie wystąpienie znaku, w którym znak występował wiele razy w nazwach plików. W tym konkretnym przypadku musiałem zastąpić ostatni myślnik
-
znakiem podkreślenia_
, zmieniając to:zaangażowany w to:
Zajęło to trochę czasu, ale w końcu to zrobiło:
Tutaj:
${i%-*}
dopasowuje początek nazwy pliku do ostatniego wystąpienia myślnika-
${file##*-}
dopasowuje resztę nazwy pliku po ostatnim wystąpieniu myślnika-
źródło