0

gawk で処理したいファイルのリストがあります。これが私のコマンドです:

ls -1 *.wma | gawk '{printf("ffmpeg -i %s track4-%s.mp3\n",$0, $1);}'

しかし、元のファイル名にはスペースが含まれているため、次のようなコマンドが表示されます

ffmpeg -i 02 Track 2.wma track4-02.mp3

スペースがエスケープされていないため、機能しません。これを正しくする方法はありますか?

期待される出力は

ffmpeg -i 02\ Track\ 2.wma track4-02.mp3
4

2 に答える 2

0

これは役に立たずバグのある の使用法ですls。代わりにを使用してこれを試してください:

for file in *.wma; do
    mp3=$(sed -r 's@([0-9]+)\s+Track\s+[0-9]+\.wma@track4-\1.mp3@' <<< "$file")
    ffmpeg -i "$file" "$mp3"
done

lsファイル情報をインタラクティブに見るためのツールです。その出力は人間用にフォーマットされており、スクリプトでバグを引き起こします。グロブを使用するか、代わりに検索してください。理由を理解してください: http://mywiki.wooledge.org/ParsingLs

于 2013-08-14T21:50:08.947 に答える