我想用一个模式重命名很多文件所以我尝试了这个循环:
$ 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
——这就是它失败的原因。