使用execdir和bash

时间:2016-06-23 18:30:56

标签: regex bash unix replace find

我是脚本新手,并且需要从文件中更改特殊字符并替换为其他字符。

以下是我必须用?替换_的文件名。

档案 - 21041159?74DECL?ARAÇÃO14581?5904289?6770700.pdf

结果 - 21041159_74DECL_ARAÇÃO14581_5904289_6770700.pdf

find . -depth -name '*\?*' -type f -execdir bash -c 'mv "$1" "${1/\?/_}"' -- {} \;

上面的脚本将问号的第一次出现更改为下划线,但不是从完整的文件名。

请建议可以做些什么?

1 个答案:

答案 0 :(得分:2)

您问题的简化版本是:

  

我可以用${var/foo/bar}替换bash变量中字符串的 first 次出现。

     

如何替换所有次事件?

答案是使用双斜杠:${var//foo/bar}

在上下文中,它将是:

find . -depth -name '*\?*' -type f -execdir bash -c 'mv "$1" "${1//\?/_}"' -- {} \;
                                                        # Here --^