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才能返回。我最近用这个更改了很多文件,它对任何特殊字符都起到了很好的作用,除了单引号。
您可以使用双引号:
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 时它都会关闭。