Sys-Admin Forum

Bash удалить файлы с расширением, исключить если имя содержит слово

В одной папке накопилась куча файлов, с расширениями mp4, avi, JPG… Нужно удалить все, кроме avi, если в названии файла содержится слово compress, в итоге быстро накатал скрипт:

cat clean-avi.sh 
#!/bin/bash

avis=`find . -type f -name "*.avi"`
mps=`find . -type f -name "*.mp4"`
jps=`find . -type f -name "*.JPG"`

for i in $avis; do
  if [[ ! $i == *"compress"* ]]; then
    echo $i
    rm -rf $i
  fi
done

for i in $mps; do
  echo $i
  rm -rf $i
done

for i in $jps; do
  echo $i
  rm -rf $i
done

Бонус:
пока писал пост, осознал, что скрипт как то длинноват, решил его укоротить, вот рабочая версия укороченного скрипта:

#!/bin/bash

exts="avi mp4 JPG"

for e in $exts; do
  res=`find . -type f -name "*."$e`
    for i in $res; do
      if [[ ! $i == *"compress"* ]]; then
        echo $i
        rm -rf $i
      fi
    done
done