You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用find命令先按顺序列目录,再列出同深度文件?

实现按深度逆序+同深度路径正序的文件列表

当然可以实现你的需求,不过单纯用find本身没法完成这种自定义排序,需要结合sort工具来调整输出顺序。

问题分析

你当前的命令find -type f -printf "%d %p\n" | sort -nr是按深度数字逆序排序,但同一深度下的路径会按字符串逆序排列(所以xtest会排在test2、test1前面),这和你期望的同深度路径升序不符。

解决方案

我们需要调整sort的参数,让它先按深度逆序排序,再对同一深度的路径按字典序正序排序。最终命令如下:

find -type f -printf "%d\t%p\n" | sort -k1,1nr -k2,2 | cut -f2-

命令拆解:

  1. find -type f -printf "%d\t%p\n":
    • 遍历所有文件(-type f),输出格式为「文件深度 + 制表符 + 文件路径」,每行一个结果。
  2. sort -k1,1nr -k2,2:
    • -k1,1nr:对第1个字段(深度值)按数字逆序排序,确保子目录中的文件(深度更大)排在前面。
    • -k2,2:对第2个字段(文件路径)按字典序正序排序,让同深度的路径按test1→test2→xtest的顺序排列。
  3. cut -f2-:
    • 去掉输出中的第一个字段(深度值),只保留最终的文件路径。

执行这个命令后,就能得到你期望的输出:

test/test1/1.txt
test/test2/1.txt
test/xtest/1.txt
test/test.txt

如果你想要一行输出所有路径,可以再追加tr '\n' ' ':

find -type f -printf "%d\t%p\n" | sort -k1,1nr -k2,2 | cut -f2- | tr '\n' ' '

补充说明

find本身的遍历顺序由文件系统决定(通常是目录项的存储顺序),没有内置的自定义排序功能,所以必须借助sort这类工具来实现复杂排序需求。

内容的提问来源于stack exchange,提问作者Alessandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:42:46