重命名所有文件,包括括号 (
Rename all files including a bracket (
我有一个目录,里面有很多文件,其中一些文件中有括号;例如a(file).ext
、an(other)file.ext
等。我的目标是将它们重命名为这样的名称:a_file_.ext
或 an?other?file.ext
。 (什么角色无关紧要)。
这是因为某些控制台应用程序无法处理这些括号,并认为这是某种命令。
我已经尝试过的事情:
$ rename ( ? *(*
$ for f in *(*; do mv $f ${f//(/?}; done
$ for f in "*(*"; do mv $f ${f//\"(\"/\"?\"}; done
之类的。
可能是我不理解这些重命名函数。 (我知道这些只适用于“(”,我必须为“)”再做一次)
那么有人可以就它的语法以及为什么它不起作用给出更多解释吗?
全在Bash.
考虑:
(shopt -s nullglob; for f in *[\(\)]*; do mv "$f" "${f//[()]/_}"; done)
(
和 )
是语法,需要转义才能明确称为文字。
- 如果没有文件匹配,设置
nullglob
选项会使 glob 完全展开,而不是它本身。将代码放在子 shell 中可以防止此配置更改在单个命令之外持续存在。
- 如果您不希望这些扩展受到字符串拆分和通配的影响,则必须在扩展周围使用引号。
我有一个目录,里面有很多文件,其中一些文件中有括号;例如a(file).ext
、an(other)file.ext
等。我的目标是将它们重命名为这样的名称:a_file_.ext
或 an?other?file.ext
。 (什么角色无关紧要)。
这是因为某些控制台应用程序无法处理这些括号,并认为这是某种命令。
我已经尝试过的事情:
$ rename ( ? *(*
$ for f in *(*; do mv $f ${f//(/?}; done
$ for f in "*(*"; do mv $f ${f//\"(\"/\"?\"}; done
之类的。 可能是我不理解这些重命名函数。 (我知道这些只适用于“(”,我必须为“)”再做一次) 那么有人可以就它的语法以及为什么它不起作用给出更多解释吗?
全在Bash.
考虑:
(shopt -s nullglob; for f in *[\(\)]*; do mv "$f" "${f//[()]/_}"; done)
(
和)
是语法,需要转义才能明确称为文字。- 如果没有文件匹配,设置
nullglob
选项会使 glob 完全展开,而不是它本身。将代码放在子 shell 中可以防止此配置更改在单个命令之外持续存在。 - 如果您不希望这些扩展受到字符串拆分和通配的影响,则必须在扩展周围使用引号。