删除不包含媒体文件的目录

时间:2020-03-30 23:29:48

标签: regex bash find

我试图制作一个脚本来删除不包含媒体文件的文件夹。下面的代码有效,但也删除了空目录,并且媒体可能位于该空文件夹的子目录中,所以我不想删除它。

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 :(得分:0)

首先,清除所有不再需要的文件

 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(例如,因为您在Mac上),请使用不带任何选项的rmdir,但请重定向2>/dev/null,以避免有关非空目录的错误消息。