从文件名中删除特定单词

从文件名中删除特定单词

我在一个文件夹中有很多文件,例如

compose_icon_200x200.png
mail_icon_200x200.png
attach_icon_200x200.png
delete_icon_200x200.png

我想从所有文件名中删除 _200x200。我努力了

find . -name '*_200x200*' -exec bash -c 'mv "$0" echo $0' "{}" \;

但出现错误,例如

./mail_icon_200x200.png: ./mail_icon_200x200.png: Permission denied

答案1

for f in *_200x200*; do
    mv -- "$f" "${f/_200x200/}"
done

或者如果您有 perlrename命令:

rename 's/_200x200//' ./*_200x200*

答案2

zsh

autoload zmv # best in ~/.zshrc
zmv -n '(**/)(*)_200x200(*.png)' '$1$2$3'

(高兴时删除-n)。

或者对于任意尺寸:

zmv -n '(**/)(*)_<->x<->(*.png)' '$1$2$3'

(请注意,它仅删除每个文件名中出现的一次_<width>x<height>)。

答案3

for file in *.png;
do
mv "$file" "`echo $file | sed 's/_200x200//'`"
done

相关内容