标题已经说得很清楚了,我知道有很多类似的问题,但最接近的我找到的是删除“而不是'。到目前为止,我尝试过的方法有:
或者使用
find -name "*'*" -type f | rename 's/\'//g'
或者使用
rename 's/[']//g'
和其他一些变体。
我找到了所有的文件,但是当我将它管道传输到rename
时,我只能得到一个提示符>
,然后不得不按下Ctrl+C键返回。最近我使用这个方法成功地改变了许多文件中的特殊字符,除了单引号之外。
rename
命令有自己的文件通配符语法,所以这里可能不需要使用find
命令。 - Tom Russellrename
进行通配(这里可能会有globstar
)。你愿意发表一个回答来演示一下吗? - Zannarename
命令(rename.ul)的结果。我对那个命令不太熟悉,但我没有找到关于rename
有自己的通配符语法(就像find
一样)的任何信息。Bash有globstar
可以使**
递归生效,但需要再次引用单引号...在Bash 5.0.17中,shopt -s globstar; rename -n "s/'//g" **/*"'"*
对我有效。 - Zannaglobstar
。那你是在使用bash
吗?我得到了“rename: 参数不足”的错误提示。 - Tom Russell$ rename "'" '' **
。这里的三个参数分别是:"'"
、''
和**
,告诉rename
命令将引号替换为空字符串,并且递归地执行此操作。 - Tom Russellrename
内置命令,根据type -a
显示。我称之为rename
Perl rename,因为它是一个Perl脚本并且使用Perl表达式。在Ubuntu中,它要么默认安装,要么可以从rename
软件包中获取。另一个rename
来自util-linux
软件包,在Ubuntu上我们需要使用rename.ul
来避免混淆。OP命令的语法以及他们在Ubuntu上调用的是rename
而不是rename.ul
,强烈暗示他们所说的rename
是指Perl版本(尽管你的回答可能对其他人有帮助)。 - Zanna