如何在Terminal中递归搜索并仅列出非文件夹文件(排除目录本身)
如何在Terminal中递归搜索并仅列出非文件夹文件(排除目录本身)
哈哈,太懂你想确认大目录结构里到底有没有实际文件的需求了!我之前也折腾了好一阵find和grep的命令,踩了不少坑,终于摸出了精准解决的办法,来分享给你~
最直接的解决方案:用find原生参数筛选
其实find本身就支持直接筛选文件类型,完全不用绕弯子。要递归找出所有非文件夹的普通文件,同时排除.DS_Store这类系统自动生成的文件,直接用这条命令就行:
find "$PWD" -type f ! -name ".DS_Store"
-type f:指定只找普通文件,自动排除所有目录、符号链接、设备文件等非文件类型的条目! -name ".DS_Store":反向匹配,排除掉所有名为.DS_Store的文件"$PWD":基于当前工作目录开始递归搜索,也可以换成你要检查的具体目录路径,比如/Users/xxx/your-large-folder
如果想直接看到文件的详细信息(比如大小、修改时间),可以配合ls命令:
find "$PWD" -type f ! -name ".DS_Store" -exec ls -laht {} +
-exec ls -laht {} +会把找到的文件批量传给ls,按修改时间倒序显示,方便你快速判断有没有有价值的内容。
聊聊我之前踩过的坑
我之前也像你一样,一开始绕了很多弯路:
- 用
prune配合xargs的方式,越写越复杂,最后输出还是混进了目录路径 - 用
grep -v DS的时候踩了大雷——直接把所有文件名里带"DS"的文件都排除了,完全偏离了只排除.DS_Store的需求 - 反复试各种
-name/-iname的写法,结果都是白忙活,因为没抓住-type f这个核心参数
其实只要记住find的-type参数,就能精准区分文件和目录,根本不用额外的过滤操作。
备注:内容来源于stack exchange,提问作者Jordan Elpern-Waxman
相关产品推荐
相关产品推荐

