Regex 使用execdir和bash查找和替换UNIX
我是一个新的脚本编写者,需要更改文件中的特殊字符并替换为其他字符 下面是我必须将Regex 使用execdir和bash查找和替换UNIX,regex,bash,unix,replace,find,Regex,Bash,Unix,Replace,Find,我是一个新的脚本编写者,需要更改文件中的特殊字符并替换为其他字符 下面是我必须将?替换为的文件名 文件-21041159?74DECL?ARAÃO14581?5904289?6770700.pdf find . -depth -name '*\?*' -type f -execdir bash -c 'mv "$1" "${1/\?/_}"' -- {} \; 结果-21041159_74DECL_ARAÇO14581_5904289_6770700.pdf find . -depth -na
?
替换为的文件名
文件-21041159?74DECL?ARAÃO14581?5904289?6770700.pdf
find . -depth -name '*\?*' -type f -execdir bash -c 'mv "$1" "${1/\?/_}"' -- {} \;
结果-21041159_74DECL_ARAÇO14581_5904289_6770700.pdf
find . -depth -name '*\?*' -type f -execdir bash -c 'mv "$1" "${1/\?/_}"' -- {} \;
上面的脚本将第一次出现的问号更改为下划线,但不是从完整的文件名更改为下划线
请建议可以做什么 您的问题的简化版本是:
我可以用${var/foo/bar}
替换bash变量中第一个出现的字符串
如何替换所有事件
答案是使用双斜杠:${var//foo/bar}
在这方面,它将是:
find . -depth -name '*\?*' -type f -execdir bash -c 'mv "$1" "${1//\?/_}"' -- {} \;
# Here --^
看看rename
命令及其正则表达式功能。为什么要从-name
选项中去掉通配符?