web-dev-qa-db-ja.com

Bashで大量のファイル名を変更しますが、ファイル名のセクションは保持します

後のプロジェクトのためにファイル構造をより適切に設定するために削除する必要があるファイルIDの前に無関係なデータがある多数の.jpgファイルがあります。コマンドラインまたはBashでバッチ名前変更を行うにはどうすればよいですか(bashが望ましい)

例:A_file_name_f3xe3_1_60113520.jpg-(60113520がID)になる予定:60113520.jpg

すべてのファイルにはIDの前にアンダースコアがありますが、名前の他の場所にランダムに追加のアンダースコアが配置されています。

4
Nema

これに特に適したコマンドがあります:

rename -n 's/.*?(\d+.jpg$)/$1/' *.jpg

prename上のdebianであり、派生しており、Perl実行可能ファイルです。

削除する -nテストがニーズに合っている場合は切り替えます。

これをデフォルトのものにするには(まだdebianで派生:

 update-alternatives --set rename /usr/bin/prename
4
Gilles Quenot

以下を使用してください。

for FILE in *.jpg ; do mv -v "$FILE" "${FILE//*_/}" ; done

これにより、ファイル名の最後の下線までのJPGファイル名のすべてが削除されます。 ここ セクション部分文字列の置換で説明されています:

$ {string // substring/replace}

$substringのすべての一致を$replacementに置き換えます。

あなたの場合、replacementは空です。

1
Daniel Beck