удалить каталоги, которые не содержат медиа-файлов - PullRequest
0 голосов
/ 31 марта 2020

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

find /mnt/movies -type d '!' -exec /bin/sh -c 'ls -1 "{}"|egrep -i -q "^*\.(avi|mp4|mkv|srt)$"' ';' -exec /bin/rm -rv {} +

Пример:

tree /mnt/movies/
/mnt/movies/
├── test1
│   └── 1.mp4
└── test2
    └── random.txt
find /mnt/movies -type d '!' -exec /bin/sh -c 'ls -1 "{}"|egrep -i -q "^*\.(avi|mp4|mkv|srt)$"' ';' -print
/mnt/movies
/mnt/movies/test2

Выше удалил бы /mnt/movies, поэтому удалил бы все.

1 Ответ

0 голосов
/ 31 марта 2020

Сначала удалите все файлы, которые вам больше не нужны

 find /mnt/movies -type f ! -name '*.mp4' ! -name '*.avi' ! -name '*.mkv' -exec rm -v {} \;

У вас осталось несколько пустых каталогов и несколько каталогов, содержащих медиа-файлы. Теперь представьте, что вы удаляете все каталоги:

find /mnt/movies -type d -exec rmdir --ignore-fail-on-non-empty -v {} \;

Это позволит пропустить каталоги, которые не пусты, то есть содержат мультимедийные файлы.

Если у вас нет Gnu rmdir (скажем, потому что вы находитесь на Ma c), используйте rmdir без каких-либо параметров, но перенаправьте 2>/dev/null, чтобы избежать сообщений об ошибках о непустых каталогах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...