首页 > 解决方案 > 如何告诉 find 命令只删除目录的内容

问题描述

find用来获取文件和目录$dest_dir并删除它们:

dest_dir="$HOME/pics"
# dest_dir content:
#  dir1
#  dir2
#  pic1
#  pic2

find $dest_dir -maxdepth 1 -exec rm -rf {} \;

我也尝试过-delete代替该-exec rm -rf {} \;部分,​​但它无法删除非空目录。

标签: linuxbashfind

解决方案


根据定义,如果您将目录名称传递给rm -rf它将删除它。如果你不想递归到子目录,你为什么要使用find呢?

rm "$dest_dir"/*

另一方面,如果您想要目录中的rm -rf所有内容......请改为这样做。

rm -rf "$dest_dir"/*

另一方面,如果您确实想从任意深度的目录树中删除文件而不是目录,请尝试

find "$dest_dir" -type f -delete

或者更模糊地-execdir找到目录并传入类似的命令sh -c 'rm {}/*',但在这种情况下,这只是笨拙和复杂。


推荐阅读