linux - 如何告诉 find 命令只删除目录的内容
问题描述
我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 {}/*'
,但在这种情况下,这只是笨拙和复杂。
推荐阅读
- reactjs - 使用 NetlifyCMS 在 localhost 和 Netlify 之间中断的图像
- c - 如何在c中的函数调用期间找到指向字符串的指针的地址
- java - DNS Java 没有为 TSIG 定义文本格式
- laravel - 对分组查询进行分页
- android - 如何优雅地使用来自 android 库的 firebaseUI 构建统一项目
- marklogic - MarkLogic - 从临时集合中永久删除所有文档
- javascript - 如何从其兄弟节点的条件中获取子节点的值
- json - 如何在 json_serializable 颤振中将 int 时间戳转换为 DateTime
- shiny - 观察事件和 RHandsontable
- machine-learning - 如何处理 YUV422 (YUYV) 图像作为 CNN 的输入?