将 sed 传递给临时变量

将 sed 传递给临时变量

我正在尝试批量更改 bash 中一些扩展名带有空格和不需要的结尾的文件。

例如从

abc.pdf.!ut.!ut

ABC.pdf

我会展示整个过程,以防我把事情弄得比实际更难。所以一开始我是这样开始的

for file in `find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2  *.\!ut.\!ut`;
do
 mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done

上面的内容在发送 mv 时对空格不起作用,所以我改成了这个

find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2  *.\!ut.\!ut | while read file
do 
    mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done

这几乎奏效了,但是 mv 开始说任意消息

usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

我是不是想太多了?

答案1

因此,如果您只是想删除结尾,!ut.!ut我建议这样做:

for file in `find ...`; do
  mv "$file" "${file%.\!ut.\!ut}"
done

在这种情况下,shell 会执行其工作并删除结尾。此功能称为参数扩展

相关内容