【问题标题】:Find and delete all directories that do NOT contain certain file types查找并删除所有不包含某些文件类型的目录
【发布时间】:2016-08-07 02:57:11
【问题描述】:

这是我目前所拥有的,它可以工作,但会引发错误,我不确定为什么:

$ 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

【问题讨论】:

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

标签: linux bash find


【解决方案1】:

试试这个命令 find . -mindepth 1 -type f | egrep -v "\.(mp4|avi|mkv)$" | xargs rm -i

【讨论】:

    【解决方案2】:

    这是我最终使用的:

    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
    

    如果不存在与正则表达式匹配的目录,我希望有一个不会引发错误的单行。

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 2017-05-06
      • 2013-07-31
      • 2021-11-28
      • 2011-05-18
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多