Сортировать список каталогов по номеру подпапки - PullRequest
0 голосов
/ 13 марта 2019

Есть ли быстрый и умный способ в 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 ]

3 голосов
/ 13 марта 2019

Вы можете использовать оператор printf в find и попросить его вернуть глубину файла %d. Затем используйте sort для этого и обрежьте, чтобы удалить вывод:

$ find . -printf '%d\t%p\n' | sort -n | cut -f2-
0 голосов
/ 13 марта 2019

Полагаю, это гораздо менее элегантно, чем ответ @ kvantour, как насчет Schwartzian transform in 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";
    }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...