标题说明了一切,是的,我知道有很多类似的问题,但我能找到的最接近的答案是删除“而不是'。到目前为止,我尝试过的是:
find -name "*'*" -type f | rename 's/\'//g'
或rename 's/[']//g'
和其他一些变体。我找到了所有文件,但是当我将其通过管道传输到时rename
,我只是得到了>
提示,并且必须Ctrl+C才能返回。我最近用这个修改了很多文件,它对任何特殊字符都有效,除了单引号。
答案1
您可以使用双引号:
rename -n "s/'//g"
测试后删除-n
以真正重命名文件
不过使用-exec
...
find -name "*'*" -type f -exec rename -n "s/'//g" '{}' \;
如果列表不太长,请加快速度......
find -name "*'*" -type f -exec rename -n "s/'//g" '{}' +
或者,按照评论中的建议,使用递归 shell 通配符:
shopt -s globstar
rename -n "s/'//g" **/*"'"*
您可以使用offshopt -u globstar
来关闭递归通配符**
,但是当您启动新的 shell 时它仍然会被关闭。
答案2
这适用bash
于我的系统(OpenSUSE Leap):
$ rename "'" '' **
3 个参数rename
是:"'"
,''
和**
(globstar
),告诉它用空字符串替换引号并递归执行。
请注意,我的系统默认启用**
( globstar
)。我不知道如何将其关闭。