替换包含(和)的文件名

时间:2014-02-06 11:28:23

标签: regex bash

我有多种格式的文件

a file (www.something.com)

我想以递归方式删除(www.something.com)。我希望

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

应该做的工作,但事实并非如此!为什么?然后我想像这样递归地做那个

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

2 个答案:

答案 0 :(得分:2)

你需要说:

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

您需要在.之前添加*

答案 1 :(得分: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")"' - '{}' \;