我正在尝试批量更改 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 会执行其工作并删除结尾。此功能称为参数扩展。