替换文件名中的通配符

替换文件名中的通配符

我无法让它工作:

我有数百个文件,我们的数据库开发人员愚蠢地在其中放置了星号,因此我们有如下命名的文件:

*1*_Floorplan.jpg

我需要递归地(两级)搜索并替换*所有文件名中所有“ ”的实例,并用下划线“ _”替换它们。

我尝试了以下操作但失败了,输出了数百次“mv”命令的使用格式(好像对于每个文件它都会尝试处理),就像我期望的那样,如果我有无效的语法,但我似乎找不到它的问题所在:

for x in `find . -regex '.*/\*.*'` ; do mv $x `echo $x | sed s/\*/_/g` ; done

这是在 Mac (10.4) 系统上,所以它是一个 Darwin 环境,如果有任何区别的话。

请帮忙!

答案1

在 $x 出现的所有地方都加上引号。

for x in `find . -regex '.*/\*.*'` ; do mv "$x" `echo "$x" | sed s/\*/_/g` ; done

答案2

您需要使用前导反斜杠 \ 来转义所有 *

相关内容