按子文件夹编号对目录列表进行排序

时间:2019-03-13 09:34:12

标签: bash shell sorting find

在bash中是否有一种快速,智能的方法(也许使用awk / sed / sort ???)来按路径中子文件夹的数量然后按字母顺序对 find 命令的结果进行排序。

我的意思是

./a/
./b/
./c/
./a/a/
./a/python-script.py
./a/test.txt
./b/a/
./b/b/
./c/a/
./c/c/
./a/a/a/
./a/a/file.txt
./a/a/t/
...
...

我想获取find命令的输出,首先查看当前文件夹中的文件名,然后查看第一级子文件夹中的文件,然后查看第二级中的文件,依此类推(如果可能的话,按顺序对每个级别)。

2 个答案:

答案 0 :(得分:3)

您可以在persisted中使用printf语句,并要求它返回文件find的深度。然后在其上使用%d并剪切以除去输出:

sort

答案 1 :(得分:0)

我想这比@kvantour的答案要优雅得多,Schwartzian transform中的Perl呢:

find . -print0 | perl -0ne '
    push(@list, $_);
    END {
        @sorted = map { $_->[0] }
        sort { $a->[1] <=> $b->[1] or $a->[0] cmp $b->[0] }
        map { [$_, tr#/#/#] } @list;
        print join("\n", @sorted), "\n";
    }'