ファイル名から特定の単語を削除する

ファイル名から特定の単語を削除する

次のフォルダには多くのファイルがあります。

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

またはperlコマンドがある場合rename

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'

(各ファイル名の1つだけが削除されることに注意してください_<width>x<height>。)

答え3

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

関連情報