Na przykład chcę mv (.*?).sql $1.php
,
czy istnieje polecenie, które pozwala mi określić wzorce zmiany nazwy?
źródło
Na przykład chcę mv (.*?).sql $1.php
,
czy istnieje polecenie, które pozwala mi określić wzorce zmiany nazwy?
Jak już wspomnieli inni, rename
jest w tym dobry, ale man rename
przed wypróbowaniem przeczytaj stronę man ( ). Istnieją co najmniej dwa zupełnie różne narzędzia o nazwie, rename
które z nich będą zależeć od twojej dystrybucji. Niepoprawne wywoływanie ich może być niebezpieczne.
Oto strona podręcznika użytkownika dla wersji opartej na perlu autorstwa Larry'ego Walla, która jest dostarczana z Ubuntu. Nadajesz mu perlowe wyrażenierename 's/\.sql$/.php/' *.sql
Oto strona podręcznika man dla zmiany nazwy, która jest dostarczana ze starszymi dystrybucjami Red Hat i CentOS. Użycie jest takie jak proste zastąpienie łańcucharename .sql .php *.sql
Możesz także użyć pojedynczej linijki bash do przetworzenia każdego pliku po jednym:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
funkcji (np. busybox)Jest taki
rename(1)
, który nie używa wyrażeń regularnych, ale może rozwiązać problem:Jest też
mmv(1)
, ale nie jestem zaznajomiony z tym, jak to działa.źródło
/usr/bin/rename
linki do/usr/bin/prename
, które wymagają wyrażeń regularnych.Dzień dobry
Możesz także spróbować wejść
Lub, aby użyć regex, zmień go nieco na
dla odrobiny zabawy z kodowaniem powłoki. (-:
źródło
ls
należy analizować danych wyjściowych .sed
przykład jest jednak całkiem dobry.Jako hydraulik lubię fajki :)
Uwaga: ta odpowiedź jest pełna - jako nowicjusz doceniam ją, gdy ktoś, kto zna, poświęca czas na wyjaśnienie, więc płacę „do przodu”. Jeśli nie jesteś nowicjuszem, przepraszam za długość i gadatliwość.
Gdzie:
wyświetla wszystkie pliki pasujące do wzorca, w tym przypadku szukam plików z datą w nazwie pliku w postaci „RRRRMMDD”
^ 1: 1. grupa przechwytywania - cała nazwa pliku
^ 2: 2. grupa przechwytywania - pierwsza część wzorca nazwy pliku
^ 3: 3. grupa przechwytywania - druga część nazwy pliku - tutaj data „RRRRMMDD”
^ 4: 4. grupa przechwytywania - opcjonalna część nazwy pliku między datą a rozszerzeniem oraz samym rozszerzeniem
Sooooo .... jeśli mam plik o nazwie
...następnie
właściwie znaczy
Zauważ, że dane wyjściowe polecenia sed są przesyłane do „bash”, aby je wykonać. Aby najpierw zobaczyć proponowane ruchy plików BEZ faktycznego ich przenoszenia, najpierw usuń „| bash ”na końcu i spróbuj tak:
Nie spowoduje to żadnych zmian, ale zobaczysz polecenie, które zostanie wykonane, jeśli uruchomisz je z '| bash 'oznaczony na końcu.
Jest to przydatne, ponieważ możesz utworzyć dowolne podkatalogi z części w nazwie pliku lub cokolwiek innego, co dodasz do tekstu „zastępczego” w poleceniu sed. Pamiętaj jednak, że sed wymaga wielu znaków ucieczki.
Wsporniki SED Regex:
(...) wymagają zmiany znaczenia dla grupowania przechwytywania -> \ (... \)
{m, n} wymagają zmiany znaczenia dla kwantyfikacji poprzedniego obiektu -> \ {m, n \}
/ wymaga zmiany znaczenia w ciągu zastępującym -> \ /
[...] NIE wymagają ucieczki dla klas postaci
\ 1 w zastępującym ciągu odnosi się do 1. przechwyconej grupy i tak dalej ...
OSTRZEŻENIE DOTYCZĄCE BEZPIECZEŃSTWA: NIGDY NIE NALEŻY PRZEWODZAĆ, ABY „uderzyć”, JEŚLI W PEŁNI NIE ZROZUMIE WYNIKÓW
Mam nadzieję, że pomoże to usunąć niektóre blokady :)
źródło
Zainstaluj
mmv
, a następnie wykonaj następujące czynności:źródło