Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 重命名包括括号在内的所有文件(_Bash_Shell_Quoting - Fatal编程技术网

Bash 重命名包括括号在内的所有文件(

Bash 重命名包括括号在内的所有文件(,bash,shell,quoting,Bash,Shell,Quoting,我有一个目录,里面有很多文件,其中一些文件有括号;例如a(file).ext,a(other)file.ext,等等。我的目标是将它们重命名为这样的内容:a_ufile.ext或a?other?file.ext(不管是什么字符) 这是因为某些控制台应用程序无法处理这些括号,并且认为这是某种命令 我已经尝试过的事情: $ rename ( ? *(* $ for f in *(*; do mv $f ${f//(/?}; done $ for f in "*(*"; do mv $f ${f//\

我有一个目录,里面有很多文件,其中一些文件有括号;例如
a(file).ext
a(other)file.ext
,等等。我的目标是将它们重命名为这样的内容:
a_ufile.ext
a?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可防止此配置更改在单个命令之外持续
  • 如果您不希望这些扩展受到字符串拆分和全局化的影响,则必须在扩展周围使用引号
考虑:

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

这里有一堆错误源于缺少/不充分的引用…说到这里,如果你不小心引用,你绝对不应该在你的文件名中使用
。这里有一堆错误源于缺少/不充分的引用…说到这里,如果你不小心引用,你绝对不应该在你的文件名中使用
s。我将添加我通常推荐的
mv-I
mv-n
,以避免在名称冲突时意外覆盖文件;否则,看起来不错!我应该在之后使用'shopt-u nullglob'来取消设置吗?@konelix,你不需要这样做,因为存在子shell。Paren论文告诉shell放弃一个自身的副本,并在该副本中运行附带的代码;当子shell结束时,对变量、设置和其他进程本地状态的更改就会消失。我将添加我对
mv-I
mv-n
的常用建议,以避免在出现名称冲突时意外覆盖文件;否则,loo很好!我应该在之后使用'shopt-u nullglob'来取消设置吗?@konelix,您不需要这样做,因为子shell的存在。括号告诉shell分叉一个自身副本并在该副本中运行附带的代码;当子shell结束时,对变量、设置和其他进程本地状态的更改就会消失。