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
perl-rename ( 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
は-n
、rename
変更を加えずに何が行われるかだけを印刷します。 期待どおりに動作することを確認したら、 を削除し-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
、それを削除して実際にコマンドを実行します。