重命名包括方括号 (.


我有一个目录,里面装满

了很多文件,其中一些文件有括号;例如 a(file).extan(other)file.ext等我的目标是将它们重命名为这样的东西: a_file_.extan?other?file.ext .(什么角色无关紧要(。

这样做

的原因是某些控制台应用程序无法处理这些括号,并认为这是某种命令。

我已经尝试过的事情:

$ rename ( ? *(*
$ for f in *(*; do mv $f ${f//(/?}; done
$ for f in "*(*"; do mv $f ${f//"("/"?"}; done

等等。可能是我不了解这些重命名功能。(我知道这些仅适用于"(",并且我必须再次为"(执行它们"(那么有人也可以对它的语法以及为什么它不起作用给出更多解释吗?

一切都在巴什。

考虑:

(shopt -s nullglob; for f in *[()]*; do mv "$f" "${f//[()]/_}"; done)
  • ()是语法,需要转义才能明确地称为文字。
  • 如果没有匹配的文件,设置 nullglob 选项会使 glob 完全展开为空,而不是自身。将代码放在子 shell 中可防止此配置更改持续到单个命令之后。
  • 如果您不希望扩展受到字符串拆分和通配,则必须在扩展周围使用引号。

最新更新