同じディレクトリにあるMP3リストの名前を変更したいと思います。たとえば、次のようになります。
001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3
次のコマンド例を試しました。
for i in *.mp3 ; do echo "${/[0-9]-/i}" ; done
私は持っています
bash: ${/[0-9]-/i}: bad substitution
私はこの結果が欲しい:
toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3
ありがとう
答え1
i
ループ内の各ファイル名に変数を設定しましたが、パラメータ拡張${
;すぐ後ろに変数名が表示されることを期待するのではなく、最後に閉じる中括弧の直前に変数名を入力します。
ファイル名の前のテキストのみを削除するには、次の構文を使用します。
for i in *.mp3 ; do echo "${i#[0-9][0-9][0-9] - }" ; done
これにより、3つが削除されます。リーダー数字の後にスペースダッシュスペースが続きます。
答え2
test.txtファイルのすべてのファイル名を参照してください。
$ cat test.txt
001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3
次のコマンドは問題のあるファイルを検索し、正しい名前に名前を変更します。
cat test.txt | sed -n '/^0\{2\}/p' | awk '{print "mv" " " $0 " " $3}' |
sed "s/ /&'/1" | sed "s/.mp3/&'/1" | sh
toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3