各ファイル名で異なるが同じ場所にある中間4文字を削除して複数のファイルの名前を変更するにはどうすればよいですか? [コピー]

各ファイル名で異なるが同じ場所にある中間4文字を削除して複数のファイルの名前を変更するにはどうすればよいですか? [コピー]

Bashを使用してファイル名を変更し、途中の4文字を削除したいと思います。

元のファイル名:

dwe_hiul123456.pdf
dwe_lkyd345876.pdf
dwe_ythn157843.pdf

新しいファイル名になるように中央の4文字を削除したいと思います。

dwe_123456.pdf
dwe_345876.pdf
dwe_157843.pdf

常に4文字が続き、_ファイル名には常に1文字が含まれています。_すべてのファイル名の長さは同じで、削除したい4文字が同じ場所にあります。

私はこの機能に初めてアクセスし、Windows 10を使用する以外にどのバージョンを使用しているのかわかりません。 Git Bashコマンドウィンドウを介してこれを実行しようとしています。

答え1

renamePerl-rename(Debianベースのシステムまたは他のシステムで利用可能perl-rename)がある場合は、次のことができます。

$ rename -n 's/_..../_/' *pdf
dwe_hiul123456.pdf -> dwe_123456.pdf
dwe_lkyd345876.pdf -> dwe_345876.pdf
dwe_ythn157843.pdf -> dwe_157843.pdf

変更なしで実行する内容のみを印刷します-nrename必要に応じて動作していることを確認したら、-nコマンドを削除して再実行して実際にファイル名を変更してください。

rename 's/_..../_/' *pdf

何らかの理由で機能しない場合は、rename単純なシェルループを使用して実行することもできます。

for file in *pdf; do
    echo mv -- "$file" "${file/_????/_}"
done

繰り返しますが、これが望ましい効果を得ると確信している場合は、echo実際の名前変更コマンドを削除してください。

for file in *pdf; do
    mv -- "$file" "${file/_????/_}"
done

答え2

使用パラメータ拡張:

$ for i in *.pdf; do
    echo mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
    #  actual `mv` command
    # mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
  done
mv -- dwe_hiul123456.pdf dwe_123456.pdf
mv -- dwe_lkyd345876.pdf dwe_345876.pdf
mv -- dwe_ythn157843.pdf dwe_157843.pdf

結果がうまくいったら、echoそれを削除して実際にコマンドを実行してください。

関連情報