
Как удалить каталоги с помощью 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 \"{}\"" \;