bash: Удаление каталогов, не содержащих заданные строки

bash: Удаление каталогов, не содержащих заданные строки

Как удалить каталоги с помощью bash, которые не содержат каталоги с именем wav или mp3? Я использую macOS Sierra.

find . -type d \! -exec test -e '{}/wav' \; -printнаходит каталоги, не содержащие wav-каталоги. Как мне включить mp3 в эту команду? И как мне удалить полученные каталоги?

Моя музыкальная библиотека имеет следующую структуру: /Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>, где формат wav или mp3. Есть много каталогов без аудиофайлов, но с обложками, например Таким образом, я не могу просто искать пустые каталоги, чтобы удалить те каталоги, которые не содержат аудиофайлов.

решение1

Прежде всего, прежде чем вы это сделаете,сделайте резервную копию ваших файлов.

Серьезно.


Чтобы найти и удалить каталоги Artist (и их содержимое, рекурсивно), которые напрямую не содержат каталоги (илифайлы) озаглавленные либо wavили mp3(кейсчувствительный), попробуйте следующее:

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

Только после того, как выподтвердил выводсоответствует каталогам, которые вы ожидаете удалить(и дважды проверил вашу резервную копию)следует ли вам затем запустить:

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

решение2

Для 2 тестов запустите тест дважды, и если оба теста не пройдены, то сделайте следующее:

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

Связанный контент