2014-02-06 41 views
1

我有多個文件,這種格式包含(和)替換文件名

a file (www.something.com) 

,我想刪除(www.something.com)遞歸。我期待

rename 's/\(*\)//' a\ file\ \(www.something.com\) 

應該做的工作,但它不!爲什麼?然後,我想這樣做遞歸這樣

find . -name '*\(*\)' -exec bash -c 'mv $0 ${0/\(*\)/}' {} \; 
+0

所屬的Unix和Linux stackexchange –

回答

1

這應該工作:

s='a file (www.something.com)' 
touch "$s" 
ls "a file"* 
a file (www.something.com) 

# renane command 
rename 's/ [^ ]*$//' "$s" 

ls "a file"* 
a file 

使用find讓它遞歸

find . -name '*\(*\)' -exec rename 's/ [^ ]*$//' '{}' \; 

否則,而無需使用重命名

find . -name '*\(*\)' -exec bash -c 'mv "$1" "$(sed "s/ [^ ]*$//"<<<"$1")"' - '{}' \; 
+0

我在回答中粘貼了以上結果,以便您可以看到它。你的輸入文件是否正確地命名爲「一個文件(www.something.com)」或其他東西? – anubhava

+0

@mahmood:即使這個重命名也可以正常工作:'rename's/[^] * $ //'a \ file \\(www.something.com \)' – anubhava

+0

您正在使用BASH還是其他?我會深入研究 – mahmood

2

你需要說:

rename 's/\(.*\)//' filename 

您需要*之前添加.