Eu encontrei este exemplo em SO, intitulado: Terminal - Excluir tudo Pastas não Conatining .mp3 Files .
#! /bin/bash
find -depth -type d | while read -r D
do
v=$(find "$D" -iname '*.mp3')
case "$v" in
"" )
echo "$D no mp3"
# rm -fr "$D" #uncomment to use
;;
esac
done
Exemplo
Dados da amostra.
.
|-- 1
| |-- 1.mp3
| '-- 1.txt
|-- 2
| '-- 2.mp3
|-- 3
| '-- 3.txt
|-- 4
| '-- 4.txt
|-- 5
| '-- 5.mp3
|-- 6
| '-- 61
| '-- 61.mp3
|-- 7
| '-- 71
| '-- 71.txt
'-- deletenomp3.bash
Execução de amostra
Se eu fosse executá-lo, ele excluiria o seguinte:
$ ./deletenomp3.bash
./7 no mp3
./7/71 no mp3
./4 no mp3
./3 no mp3
Outros tipos de arquivos
Você pode simplesmente estender isso adicionando mais -name
argumentos ao segundo comando find no script. Exemplo, para adicionar .wav
arquivos:
v=$(find "$D" -iname '*.mp3' -o -iname '*.wav');
Isso diz *.mp3
OR *.wav
. Para adicionar mais ou outros:
v=$(find "$D" -iname '*.mp3' -o -iname '*.flac' -o -iname '*.m4a');
Tenho certeza de que esse bloco poderia ser condensado se você tivesse muito mais tipos de arquivo usando alternância alternativa para find
.