
同じディレクトリにある他のファイルに基づいて何百ものファイル名を変更しようとしています。スクリプトを見つけて修正し、次のような結果を得ました。
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コマンドはファイルが存在する場合はファイル名を正しく変更します。エコーなしでスクリプトを実行すると、次のエラーが発生します。
mv: cannot stat ‘"./dir1/Trailer.mov"’: No such file or directory
このエラーは、ファイルが存在するかどうかに関係なく、すべてのプロジェクトで発生します。なぜこれが起こるのですか?ルートで実行しています。
答え1
内部引用符を削除するか、を使用する必要がありますeval
。
問題は、"
sがファイル名の一部と見なされることです。つまり、存在しない無効なファイル名にアクセスしようとしているということです。