如何使用`rename`递归删除所有文件中的所有单引号?

Tho*_*mas 4 command-line special-characters rename batch-rename

标题说明了一切,是的,我知道有很多类似的问题,但我能找到的最接近的是删除“而不是 '。到目前为止我尝试过的是:

find -name "*'*" -type f | rename 's/\'//g'
Run Code Online (Sandbox Code Playgroud)

rename 's/[']//g'和其他一些变化。我找到了所有文件,但是当我通过管道将它发送到 时rename,我只是得到>提示并且必须Ctrl+C才能返回。我最近用这个更改了很多文件,它对任何特殊字符都起到了很好的作用,除了单引号。

Zan*_*nna 8

您可以使用双引号:

rename -n "s/'//g"
Run Code Online (Sandbox Code Playgroud)

-n测试后删除以真正重命名文件

使用-exec虽然...

find -name "*'*" -type f -exec rename -n "s/'//g" '{}' \;
Run Code Online (Sandbox Code Playgroud)

如果列表不是太长,请使其更快...

find -name "*'*" -type f -exec rename -n "s/'//g" '{}' +
Run Code Online (Sandbox Code Playgroud)

或者,按照评论中的建议,使用递归 shell globbing:

shopt -s globstar
rename -n "s/'//g" **/*"'"*
Run Code Online (Sandbox Code Playgroud)

您可以使用offshopt -u globstar来关闭递归通配符**,但无论如何当您启动新 shell 时它都会关闭。