Linux 查找并删除不包含特定文件类型的所有目录

Linux 查找并删除不包含特定文件类型的所有目录,linux,bash,find,Linux,Bash,Find,到目前为止,我已经知道了,它可以工作,但它抛出了一个错误,我不确定为什么: $ find . -mindepth 1 -type d '!' -exec sh -c 'ls -1 "{}" | egrep -i -q "\.(mp4|avi|mkv)"' \; -print -exec rm -r {} \; ./test find: `./test': No such file or directory 试试这个命令 find-mindepth 1-键入f | egrep-v“\(mp4 |

到目前为止,我已经知道了,它可以工作,但它抛出了一个错误,我不确定为什么:

$ find . -mindepth 1 -type d '!' -exec sh -c 'ls -1 "{}" | egrep -i -q "\.(mp4|avi|mkv)"' \; -print -exec rm -r {} \;
./test
find: `./test': No such file or directory
试试这个命令
find-mindepth 1-键入f | egrep-v“\(mp4 | avi | mkv)$”| xargs rm-i

尝试此命令
find-mindepth 1-类型f | egrep-v“\(mp4 | avi | mkv)$”| xargs rm-i

这是我最后使用的:

find . -mindepth 1 -type d '!' -exec sh -c 'ls -1 "{}" | egrep -i -q "\.(mp4|avi|mkv)"' \; -print | while read line;do rm -r $line;done

如果没有与regex匹配的目录存在,我希望有一个不会抛出错误的单行程序。

这就是我最终使用的:

find . -mindepth 1 -type d '!' -exec sh -c 'ls -1 "{}" | egrep -i -q "\.(mp4|avi|mkv)"' \; -print | while read line;do rm -r $line;done

如果没有与regex匹配的目录,我希望有一个不会抛出错误的单行程序。

我建议您在使用自动文件删除功能时要非常小心。首先,尝试只打印文件名,然后在完全测试后,添加rm命令。您是否希望整个管道的
-exec
d值为
{}
?我认为那是不对的。我会将所有这些代码放入一个shell脚本中,并使用
find…|xargs./myShellscript.sh
。测试,测试,运行前测试!只要让它回显
rm
CMD,一旦它们看起来正确,就可以将它们导入\
|bash
。祝你好运。我建议你在使用自动文件删除功能时要非常小心。首先,尝试只打印文件名,然后在完全测试后,添加rm命令。您是否希望整个管道的
-exec
d值为
{}
?我认为那是不对的。我会将所有这些代码放入一个shell脚本中,并使用
find…|xargs./myShellscript.sh
。测试,测试,运行前测试!只要让它回显
rm
CMD,一旦它们看起来正确,就可以将它们导入\
|bash
。祝你好运