ファイル名操作にbashシェルパラメータ拡張を使用する方法

ファイル名操作にbashシェルパラメータ拡張を使用する方法

同じディレクトリにある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

関連情報