如何递归获取所有文件列表(不含所属目录)并按字母排序?
如何递归获取所有文件列表(不含所属目录)并按字母排序?
嘿,我懂你现在的痛点——之前用ls -a只能列出目录本身,ls -aR虽然能递归遍历,但文件都是跟着各自的目录分组显示的,没法直接拿到所有文件名统一按字母排序的列表对吧?
给你两个实用的解决方案,优先推荐第一个,更稳妥:
方案一:用find命令(推荐)
这是最可靠的方式,能完美处理各种特殊文件名(比如带空格、换行的),而且逻辑清晰:
find . -type f -printf "%f\n" | sort
拆解一下每个部分的作用:
find .:从当前目录开始递归遍历所有内容-type f:只筛选出文件(排除目录、链接等其他类型)-printf "%f\n":只输出文件名本身,不带任何路径前缀| sort:把所有文件名按字母顺序排序
如果需要包含隐藏文件的话,这个命令也能自动处理,因为find默认会遍历隐藏目录和文件,不用额外加参数。
方案二:用ls配合文本处理(适合简单场景)
如果你更习惯用ls,也可以通过管道结合grep来实现,但要注意这种方式在文件名有特殊字符时可能出问题:
ls -aR | grep -v '/$' | grep -v '^[.]' | sort
解释一下:
ls -aR:递归列出所有内容(包括隐藏项)grep -v '/$':过滤掉目录行(目录行结尾是/)grep -v '^[.]':过滤掉开头的目录标识行(比如./dir:这种格式)| sort:最后统一排序
为啥之前的ls命令满足不了需求?因为ls -aR是按目录层级输出的,每个目录下的文件都跟着目录名展示,没法直接得到全局排序的文件名集合,而find可以直接提取所有文件名后再统一排序,逻辑更直接。
备注:内容来源于stack exchange,提问作者Nuno Fonseca
相关产品推荐
相关产品推荐

