名前変更コマンドは部分文字列を削除します。

名前変更コマンドは部分文字列を削除します。

次のファイルの名前を一括変更しようとしています。

art-faculty-3_29060055362_o.jpeg  
fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg  
theatre-faculty-2016-2017-1_29132529356_o.jpeg
art-history-faculty-2016-2017-1_29060057642_o.jpeg         
music-faculty-2016-2017-1_29132523816_o.jpeg

名前を次のように変更したいと思います。

art-faculty.jpeg                           
fine-arts-division-faculty.jpeg
theatre-faculty.jpeg
art-history-faculty.jpeg  
music-faculty.jpeg

これが私が今まで持っているものです:

rename -n -D '/faculty(.*)/g' -X -v *

これにより、次のものが返されます。

Using expression: sub { use feature ':5.18'; s/\/faculty\(\.\*\)\/g//g; s/\.   ([^.]+)\z//x and do { push @EXT, $1; $EXT = join ".", reverse @EXT } }
'art-faculty-3_29060055362_o.jpeg' unchanged
'art-history-faculty-2016-2017-1_29060057642_o.jpeg' unchanged
'fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg' unchanged
'music-faculty-2016-2017-1_29132523816_o.jpeg' unchanged
'theatre-faculty-2016-2017-1_29132529356_o.jpeg' unchanged

削除(-D)変換にREGEXを使用できますか?それでは、上記の変換を実行するためにどのように使用しますか?そうでない場合は、renameREGEXを使用して変換を実行する正しい方向を教えてください。

クイックリファレンス

ベストアンサー1

for i in *.jpeg; do echo mv "$i" "${i%faculty*}faculty.jpeg" ; done

要件を満たしている場合は、削除してechoファイル名を変更してください。


私のシステムのperl renameコマンドにはオプションしかありません。-v -f -n

$ rename -n 's/faculty\K.*(?=\.jpeg)//' *.jpeg
art-faculty-3_29060055362_o.jpeg renamed as art-faculty.jpeg
art-history-faculty-2016-2017-1_29060057642_o.jpeg renamed as art-history-faculty.jpeg
fine-arts-division-faculty-2016-2017-5_29165851925_o.jpeg renamed as fine-arts-division-faculty.jpeg
music-faculty-2016-2017-1_29132523816_o.jpeg renamed as music-faculty.jpeg
theatre-faculty-2016-2017-1_29132529356_o.jpeg renamed as theatre-faculty.jpeg

おすすめ記事