Как сгенерировать ASCII-представление файловой иерархии Unix?
Все . Я ищу быстрый и грязный способ создания некоторых диаграмм некоторых каталогов, которые имеют почти, но не совсем одинаковую иерархию, чтобы я мог показать их на собрании, и мы могли решить, какой аромат нам больше нравится. Меня не интересуют "листовые" узлы, просто каталоги.
Подвох: я не хочу связываться с X. Это серверная система, с которой я работаю полностью через SSH. Поэтому я ищу что-то, что будет делать макет ASCII, может быть, с простыми символами-черточками для линий или чем-то еще.
Кто-нибудь знает о такой утилите? Я уверен, что мог бы написать что-нибудь сам, но это такой небольшой проект, с обработкой пробелов, разметки и тому подобного; Мне бы очень хотелось узнать, что кто-то сделал это для меня. Увы, Google, похоже, не знает ничего подобного... или, если это так, скрыто под кучей превосходных визуальных объяснений стандартной общей файловой иерархии Unix. Спасибо!
2 ответа
Я хотел бы использовать tree
,
$ tree -d /usr|head -n 12 / USR |- X11R6 | `- lib | `- X11 | `- хитрый |- бен | `- X11 -> . |- игры |- i586-mingw32msvc | |- бен | |- включить | | |- GL
Если у вас нет дерева, вы можете использовать эту команду Linux/ Unix:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Вы также можете сделать сценарий оболочки, чтобы увидеть подробности здесь.
Объяснение для вышеупомянутой команды:
ls -R
перечислить все каталоги, подкаталоги,
объяснение ls -R
перечислить все файлы и каталоги рекурсивно
например:
./sys/devices/platform/ag71xx.0/net/eth0:
addr_assign_type device iflink speed
./sys/devices/platform/ag71xx.0/net/eth0/queues:
tx-0
grep ":$"
фильтрует только те файлы, которые имеют :
до конца строки, таким образом, остается, что-то вроде.
./sys/devices/platform/ag71xx.0/net/eth0:
./sys/devices/platform/ag71xx.0/net/eth0/queues:
Затем серия из нескольких команд передается с использованием -e
переключиться на sed
's/:$//'
снимает весь след :
's/[^-][^\/]*\//--/g'
оставляет только то, что находится между /
-
и заменить каждый на --
остальные две команды добавляют несколько пробелов и |
Результат примерно такой:
|-----------eth0
|-------------queues