Назад | Перейти на главную страницу

Как сгенерировать ASCII-представление файловой иерархии Unix?

все. Я ищу быстрый и грязный способ сгенерировать диаграммы некоторых каталогов, которые имеют почти, но не совсем одинаковую иерархию, чтобы я мог показать их на собрании, и мы могли решить, какой вариант нам больше нравится. Меня не интересуют «листовые» узлы, только каталоги.

Уловка: я не хочу связываться с X. Это серверная система, с которой я работаю исключительно через SSH. Итак, я ищу что-то, что будет делать макет ASCII, может быть, с простыми чертами и дефисами для строк или что-то в этом роде.

Кто-нибудь знает о такой утилите? Я уверен, что мог бы написать что-нибудь сам, но это такой непростой проект с обработкой интервалов, компоновкой и т. Д .; Я действительно хотел бы узнать, что кто-то сделал это за меня. Увы, Google, похоже, не знает об этом ... а если и знает, то это скрыто под кучей превосходных визуальных объяснений стандартной общей иерархии файлов Unix. Спасибо!

я хотел бы использовать tree.

$ tree -d /usr|head -n 12
/usr
|-- X11R6
|   `-- lib
|       `-- X11
|           `-- wily
|-- bin
|   `-- X11 -> .
|-- games
|-- i586-mingw32msvc
|   |-- bin
|   |-- include
|   |   |-- 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