Regex 替换包含(和)的文件名

Regex 替换包含(和)的文件名,regex,bash,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/\(*\)/}' {} \; 你需要说: rename 's/\(.*\)//' filename

我有多个这种格式的文件

a file (www.something.com)
我想递归地删除
(www.something.com)
。我想

rename 's/\(*\)//' a\ file\ \(www.something.com\)
我应该做这项工作,但事实并非如此!为什么?然后我想递归地这样做

find . -name '*\(*\)' -exec bash -c 'mv $0 ${0/\(*\)/}' {} \;
你需要说:

rename 's/\(.*\)//' filename
您需要在
*

之前添加
,这应该可以:

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 . -name '*\(*\)' -exec rename 's/ [^ ]*$//' '{}' \;
或者不使用重命名

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

find-名称“*\(*\)”-exec bash-c'mv“$1”“$”(sed“s/[^]*$/”我已经在我的答案中粘贴了上面的结果,以便您可以看到。您的输入文件的名称是否与
文件(www.something.com)
或其他名称完全相同?@mahmood:即使这样重命名也可以:
重命名's/[^]*$/'a\file\\(www.something.com\)
您使用的是BASH还是其他什么?如果您愿意,我会深入探讨。我可以发布一个解决方案,而无需使用
重命名
确定立即检查更新的答案。属于Unix和Linux stackexchange