@glaucidium

Как получить иерархический список путей, сортированый по типу файлов и алфавиту?

Здравствуйте!
Как получить иерархический список полных путей, где сначала бы шли файлы, потом каталоги, и каждый тип файлов в алфавитном порядке?

Пример нужного порядка:
spoiler
settings/
settings/dolphinrc.txt
settings/vimrc.txt
settings/яндекс.txt
settings/fish/
settings/fish/fish_prompt_new.txt
settings/fish/fish_prompt_old.txt
settings/Menu/
settings/Menu/contents/
settings/Menu/contents/ui/
settings/Menu/contents/ui/AppContextMenu.txt
settings/Menu/contents/ui/XdgPathsLoader.txt
settings/Шрифты/


Что пробовал:
find $path – выдаёт пути случайным образом.
find $path -depth – ту папку, где сейчас находится, действительно печатает в конце. Но содержимое папки всё ещё выдаётся в случайном порядке.
find $path | sort – сортировки по алфавиту, глубине, родительскому пути не дали нужного.
tree -fi $path – выдаёт пути случайным образом.
tree -fi --dirsfirst $path – то что нужно! Но папки идут первыми. Эх если б была опция --filefirst.
du -a $path – выдаёт пути случайным образом.
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
@glaucidium Автор вопроса
Задача оказалась не тривиальной.
Самое красивое решение, это запустить find по папкам, и вложить в -exec ему, find по файлам.

Просто вывести список путей, с обходом в ширину.
find /mnt/d/settingsMicro/ -type d -print -exec find "{}" -maxdepth 1 ! -type d \;


Список путей с форматированием
find /mnt/d/settingsMicro/ -type d -printf '%y %p/\n' -exec find "{}" -maxdepth 1 ! -type d -printf '%y %p\n' \;


Список путей с обработкой
find /mnt/d/settingsMicro/ -type d -exec find "{}" -maxdepth 0 -printf '%y %p/\n' \; -exec find "{}" -maxdepth 1 ! -type d -printf '%y %p\n' \;


Ссылки по теме:
https://stackoverflow.com/questions/12503958/recur...
https://stackoverflow.com/questions/539583/how-do-...
https://unix.stackexchange.com/questions/279895/ho...
https://stackoverflow.com/questions/1086907/can-fi...
https://github.com/tavianator/bfs - написали рекурсивный find
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Zzzz9
Не понял, что хочется. Чем не устраивает например:
find путь -print | sort -g
Ответ написан
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
алгоритм/цикл
нашли все директории (рекурсивно)
для каждой директории вывели список её файлов+название самой директории
гоу ту пока не перебрали фсё найденое.
решаемо даже через finde с нужными параметрами
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы