2016-06-23 41 views
1

我是新手腳本,並有一個要求,我需要從文件中更改特殊字符並替換爲其他字符。UNIX查找和替換使用execdir和bash

以下是我必須用_替換?的文件名。

文件 - 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/\?/_}"' -- {} \; 

上述腳本改變問號的第一次出現,以強調而不是從完整的文件名。

請建議可以做些什麼?

+0

請看看[編輯的幫助(http://stackoverflow.com/editing-help)。 – Cyrus

+0

查看'rename'命令及其正則表達式功能。 – Cyrus

回答

2

你的問題的簡化版本是:

我可以${var/foo/bar}替換在bash變量第一出現一個字符串。

我該如何更換全部發生?

而答案是使用雙斜槓:${var//foo/bar}

在上下文中,這將是:

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

你爲什麼把通配符從'-name'選項中取出? – Barmar