Zmień nazwę wszystkich plików w katalogu Linux [duplikat]

1

Możliwa duplikat:
Zmień nazwę plików wsadowych w systemie Linux

Mam listę 1000 plików w katalogu w moim systemie Linux:

01-Star_Network.en.srt  
02-Subsets.en.srt  
03-Function_Comparision.en.srt

Chcę .en usunięty ze wszystkich plików i zmień ich nazwy na:

01-Star_Network.srt  
02-Subsets.srt  
03-Function_Comparision.srt

Czy istnieje jakiś skrypt bash, python, java lub PHP, aby to zrobić?

Sajad Rastegar
źródło
1
To powinno być łatwe z każdym z wymienionych narzędzi. Pytanie brzmi ... czego próbowałeś?
psoft,

Odpowiedzi:

1

Wystarczy użyć tego polecenia:

rename 's/\.en\.srt$/.srt/' *.srt

renamejest Perl renamedomyślnie ustawiony na Ubuntu:

$ LANG=C update-alternatives --display rename
rename - auto mode
  link currently points to /usr/bin/prename
/usr/bin/prename - priority 60
  slave rename.1.gz: /usr/share/man/man1/prename.1.gz
Current 'best' version is '/usr/bin/prename'.

Jest instalowany z perl Ubuntusamym pakietem.

Gilles Quenot
źródło
1
Spowoduje to usunięcie pierwszego wystąpienia „.en.”: „01-.en.wikipedia.org.en.srt” zmieni się na „01-.wikipedia.org.en.srt”. Jeśli chcesz usunąć tylko ostatnie „en”, możesz to zrobić 's/\.en\.srt$/.srt/'.
Inductiveload
odpowiednio post editec
Gilles Quenot
1

Wykona to następujące polecenie:

find . -name '*.en.srt' | sed 'h; s/.en.srt$/.srt/; H; x; s/\n/ /' | xargs -l mv
  • find znajduje pliki, których nazwy należy zmienić
  • sed edytuje nazwę pliku
  • xargs wywołuje polecenie mv dla każdej nazwy pliku, aby wykonać zadanie

Aby najpierw sprawdzić, co robisz, spróbuj dodać „echo” tuż przed mv, w ten sposób:

find . -name '*.en.srt' | sed 'h; s/.en.srt$/.srt/; H; x; s/\n/ /' | xargs -l echo mv
łał
źródło
0

renameod również util-linuxpowinien to zrobić:

rename .en.srt .srt *.en.srt
don_crissti
źródło