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

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

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

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

-1
05.11.2016, 04:13
2 ответа

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

Серьезно.


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

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
28.01.2020, 05:10

За 2 теста проведите тест дважды, и если оба они не удались, то сделайте что-нибудь:

find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;
-1
28.01.2020, 05:10

Теги

Похожие вопросы