如何告诉 find 命令只删除目录的内容

how to tell find command to only remove contents of a directory

我正在使用 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 {} \; 部分,但它不能删除非空目录。

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

rm "$dest_dir"/*

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

rm -rf "$dest_dir"/*

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

find "$dest_dir" -type f -delete

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

您可以使用这个 find 命令:

find "$dest_dir" -maxdepth 1 -mindepth 1 -exec rm -rf {} +

选项 -mindepth 1 将查找 "$dest_dir" 内的所有条目至少向下一级,并将跳过 "$dest_dir" 本身。