Bash命令以递归方式列出文件,但按分类排序

Rhu*_*arb 7 sorting bash find

我经常使用Bash中的优秀查找程序列出具有特定过滤器的文件.例如,在Subversion(SVN)工作副本中,我有时希望以递归方式列出所有文件但排除.svn子目录,如下所示:

find . -name '.svn' -prune -o -type f -print
Run Code Online (Sandbox Code Playgroud)

今天,我想做类似的事情,但我也想影响列出目录内容的顺序:我希望'普通'文件后跟子目录(然后是递归内容).似乎没有这个选项.

LS(列表)命令有一个选项,以递归列出.此命令有许多排序选项,包括按文件名列出,访问时间,大小等,但不是分类,尽管该-p选项将注释目录.

现在,我可以编写一个Python脚本来完成我想要的操作.但是,find几乎已经做了我想要的一切.通常的Bash shell中,可以结合你想要的东西,节目要做到:每个程序,如find,sort,uniq,ls,wc,执行简单的任务,但这样做很好.并非每个程序都需要能够排序,因为sort可以排序.所以,真的,我只是好奇......

我的问题是,你知道是否有办法做我想做的事情:只是通过组合Bash程序来过滤和排序递归文件列表?

例如,find给我这个按字母顺序排列的文件:

a.txt
b\file1.txt
b\subdir\file2.txt
b\then_file3.txt
c.txt
d\file4.txt
e.txt
Run Code Online (Sandbox Code Playgroud)

但我更喜欢它们的顺序,在每个目录中,普通文件首先按字母顺序排列,然后按字母顺序依次列出目录:

a.txt
c.txt
e.txt
b\file1.txt
b\then_file3.txt
b\subdir\file2.txt
d\file4.txt
Run Code Online (Sandbox Code Playgroud)

(我是Windows用户,但我在Cygwin中运行Bash shell .)

谢谢.

R S*_*hko 10

使用嵌入式查找.外部查找定位所有目录并执行内部查找,该查找仅显示该目录中所需的文件:

find . -type d -exec find {} -type f -maxdepth 1 \;
Run Code Online (Sandbox Code Playgroud)

  • 当我尝试这个时,结果是未排序的(按目录和目录级别内)。 (2认同)