
同じディレクトリ内の別のファイルに基づいて、数百のファイルの名前を変更しようとしています。スクリプトを見つけて、修正を加えると次のようになります。
while read file; do echo mv "\"${file%/*}/Trailer.mov\"" "\"${file%.*}-Trailer.mov\""; done < <(find . -type f ! -name "Trailer.mov" -name "*.mkv")
次のような mv コマンドを出力します。
mv "./dir1/Trailer.mov" "./dir1/filename-Trailer.mov"
mv コマンドは、手動で実行すると、ファイルが存在する場合、ファイルの名前を正しく変更します。echo なしでスクリプトを実行すると、次のようなエラーが発生します。
mv: cannot stat ‘"./dir1/Trailer.mov"’: No such file or directory
このエラーは、ファイルの存在に関係なく、すべての項目で発生します。なぜこれが起こるのでしょうか? 私は root として実行しています。
答え1
内側の引用符を削除するか、 を使用する必要がありますeval
。
問題は、"
がファイル名の一部とみなされるようになったことです。つまり、間違ったファイル名 (存在しない) にアクセスしようとします。