linux – 如何使用find -exec和rm删除目录内容(而不是目录本身)?

我试图删除一些目录的内容(但不是目录本身)使用这个:
find -type d -name someDirs -exec rm -rf {}/* \;

但它不起作用.有小费吗?

解决方法

您的命令的问题在于,在实际调用命令之前,您的shell将完成通配符扩展.由于您的shell找不到与{} / *匹配的文件(因为您在当前目录中没有带有文字名{}的目录),*将被传递给未更改的命令,然后由以下命令修改:找到删除someDirs目录中名为literal *的文件,因为rm命令不会再次扩展通配符.你可以通过运行来“调试”它
find -type d -name someDirs -exec echo rm -rf {}/* \;

代替.为了确保shell有机会扩展你的*,让exec生成另一个shell,它可以扩展*(并保护命令不会首先用单引号扩展),如下所示:

find -type d -name someDirs -exec sh -c 'rm -rf {}/*' \;

或者像这样测试:

find -type d -name someDirs -exec sh -c 'echo rm -rf {}/*' \;

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...