Как сгенерировать 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
Другие вопросы по тегам