for 循环中出现“mv:无法统计文件”

for 循环中出现“mv:无法统计文件”

我想用一个模式重命名很多文件所以我尝试了这个循环:

$ for f in *; do mv \""$f"\" \""HouseMD-S06E${f#*Episode }"\"; done

但是我收到了这个错误:

mv: cannot stat `"House MD Season 6 Episode 01 - Broken (Parts 1 & 2).avi"': No such file or directory

所以我所做的就是将 mv 命令回显到这样的文件中:

$ for f in *; do echo mv \""$f"\" \""HouseMD-S06E${f#*Episode }"\">>mv.txt; done

然后使用 运行该文件source

有什么想法为什么第一个不起作用以及我该如何修复它?

答案1

无需再次转义双引号。如果使用双引号,这将确保即使变量$f被扩展,文件名中的空格也不会出现问题。

for f in *; do mv "$f" "HouseMD-S06E${f#*Episode}"; done

如果您有这些“双重双引号”,假设您有文件foo,那么 shell 将尝试运行该命令:

mv ""foo"" …

显然,"foo"它并不存在——仅仅存在foo——这就是它失败的原因。

相关内容