
我正在嘗試根據同一目錄中的另一個檔案重命名數百個檔案。我找到了一個腳本,經過修改後,我有以下內容:
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
.
問題是"
s 現在被視為檔案名稱的一部分,即嘗試存取錯誤的檔案名稱(不存在)。