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ć?


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.