![各ファイル名で異なるが同じ場所にある中間4文字を削除して複数のファイルの名前を変更するにはどうすればよいですか? [コピー]](https://linux33.com/image/197943/%E5%90%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%A7%E7%95%B0%E3%81%AA%E3%82%8B%E3%81%8C%E5%90%8C%E3%81%98%E5%A0%B4%E6%89%80%E3%81%AB%E3%81%82%E3%82%8B%E4%B8%AD%E9%96%934%E6%96%87%E5%AD%97%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%A6%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%90%8D%E5%89%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
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
rename
Perl-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
それを削除して実際にコマンドを実行してください。