我无法让它工作:
我有数百个文件,我们的数据库开发人员愚蠢地在其中放置了星号,因此我们有如下命名的文件:
*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
您需要使用前导反斜杠 \ 来转义所有 *