bash: eliminar directorios que no contienen cadenas determinadas

bash: eliminar directorios que no contienen cadenas determinadas

¿Cómo puedo eliminar directorios usando bash que no contienen directorios llamados wav o mp3? Yo uso macOS Sierra.

find . -type d \! -exec test -e '{}/wav' \; -printbusca los directorios que no contienen directorios wav. ¿Cómo puedo incluir mp3 a este comando? ¿Y cómo puedo eliminar los directorios resultantes?

Mi biblioteca de música sigue esta estructura: /Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>, donde el formato es wav o mp3. Hay muchos directorios sin ningún archivo de audio excepto cubiertas, por ejemplo, por lo que no puedo simplemente buscar directorios vacíos para eliminar aquellos directorios que no contienen archivos de audio.

Respuesta1

En primer lugar, antes de hacer esto,haz una copia de seguridad de tus archivos.

En serio.


Para buscar y eliminar directorios de artistas (y su contenido, de forma recursiva) que no contienen directorios directamente (oarchivos) titulados wavo mp3(casosensible), intente lo siguiente:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -print

Sólo después de haberconfirmó la salidacoincide con los directorios que espera que se eliminen(y revisé dos veces tu copia de seguridad)entonces deberías ejecutar:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -exec rm -rf {} \;

Respuesta2

Para 2 pruebas, ejecute la prueba dos veces y, si ambas fallaron, haga algo:

find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;

información relacionada