如何告诉 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 {} \;
- 预期:仅删除
dest_dir
内容(即 dir1、dir2、pic1、pic2)而不是 dest_dir 本身
- 实际结果:该命令也删除了
dest_dir
我也试过 -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"
本身。
我正在使用 find
获取 $dest_dir
中的文件和目录并删除它们:
dest_dir="$HOME/pics"
# dest_dir content:
# dir1
# dir2
# pic1
# pic2
find $dest_dir -maxdepth 1 -exec rm -rf {} \;
- 预期:仅删除
dest_dir
内容(即 dir1、dir2、pic1、pic2)而不是 dest_dir 本身 - 实际结果:该命令也删除了
dest_dir
我也试过 -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"
本身。