0

一部のビデオのインデックス作成を修正するプロセスを自動化したいと考えていました。以下は私のコードです。

for f in ~/Videos/Temp/*
do
    f=$(echo $f | sed 's/ /\\ /g')
    name=$(echo $f | sed 's/Temp/Fixed/1')
    mencoder -forceidx "$f" -o "$name" -oac copy -ovc copy
done

私が抱えている問題は、mencoder が変数 $f にファイル ストアが見つからないと主張していることです。

MEncoder svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
File not found: '/home/name/Videos/Temp/file\ name.avi'
Failed to open /home/bryan/Videos/Temp/file\ name.avi.
Cannot open file/device.

Exiting...

展開された変数を使用してコマンドをターミナルに出力して実行すると、問題なく動作します。上記のコードを修正して、各ビデオを修正するためのコマンドを出力し、それを新しいスクリプトに貼り付けたところ、すべて問題なく機能しました。これをUbuntuで実行しています。これを引き起こす可能性のあるものについてのアイデアはありますか?

4

2 に答える 2

1

他の人が指摘したように、ファイル名のスペースを手動でエスケープする必要はありません。sedただし、パスを変更するために を使用する必要もありません。

for f in ~/Videos/Temp/*
do
    mencoder -forceidx "$f" -o "${f/Temp/Fixed}" -oac copy -ovc copy
done

"Temp" の最初の出現のみが "Fixed" に置き換えられるため、ファイル名の意図しない置換について心配する必要はありません。

于 2012-05-25T13:14:59.497 に答える
0


    find ~/Videos/Temp/ -type f -print0 | while IFS= read -r -d $'\0' f; do
        name=$(echo "$f" | sed 's/Temp/Fixed/1')
        mencoder -forceidx "$f" -o "$name" -oac copy -ovc copy
    done

于 2012-05-25T07:24:43.860 に答える