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

前端之家收集整理的这篇文章主要介绍了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 {}/*' \;

猜你在找的Linux相关文章