次のようにファイル名を変更したいと思います。
SL Benfica vs. SC Beira-Mar 136.mp4
SL Benfica vs. SC Beira-Mar 137.mp4
SL Benfica vs. SC Beira-Mar 138.mp4
SL Benfica vs. SC Beira-Mar Jogo 074.mp4
SL Benfica vs. SC Beira-Mar Jogo 082.mp4
SL Benfica vs. SC Beira-Mar Jogo 112.mp4
しかし、これは
for f in *.mp4; do echo mv "$f" "${f//[^0-9]/}.mp4"; done
最後に「4」を追加します。
1364.mp4
1374.mp4
1384.mp4
0744.mp4
0824.mp4
1124.mp4
「mp4」の「4」と混同されたようです。この問題をどのように解決できますか?
答え1
.mp4
置き換える前にサフィックスを削除してください。
for f in *.mp4; do
fname=${f%.mp4}
mv -- "$f" "${fname//[^0-9]}.mp4"
done
--
ファイル名がaで始まる場合に備えて追加および-
削除しましたecho
。
答え2
あなたは正しいです。4
表示されるのはmp4
拡張機能からのものです。その理由は、あなたが扱っているからです。いっぱい${f//[^0-9]/}
その.mp
部分を含むファイル名ステートメントから数字以外の文字をすべて削除し、末尾の4
文字を保持します。
sed
次の目的で使用できます。
for f in *.mp4; do
newname="$(sed 's/^[^0-9]*//' <<< "$f")"
mv "$f" "$newname"
done
しかし、テストしてみてください(あなたの投稿で読んだようにはっきりとしたように)。
答え3
あなたを使用すると、prename
次のようなものを実行できます
prename 's/^\D*//' *.mp4
メモ:
\D
数字ではありません^\D*
ファイル名の先頭に数字以外のシーケンスs/^\D*//
最初に数字以外のものを削除し、名前を変更します。
Ubuntuなどの一部のLinuxディストリビューションではこのコマンドと呼ばれ、rename
Archなどの他のディストリビューションではこのコマンドが呼ばれますperl-rename
。