Дерево папок с правами

В ОС OS X и SunOS не существует «команды дерева bash».

Чтобы построить древовидный «граф» папок, я использую следующую инструкцию:

find . -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

Или это, чтобы показать файлы тоже.

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

Но мне нужна другая версия, которая также содержит права на папки. Я очень растерялся, чтобы добавить справа права на папку. У кого-нибудь есть идеи ??

Обновление: есть возможность отображать файлы внутри папок и их права. Я пытаюсь использовать эту команду find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' в сочетании с решением, предоставленным #fedorqui, но результат не так хорош.

Вот результат, полученный с помощью вышеуказанной команды, без прав.

| | |____src
| | | |____cft2exit.c
| | | |____cft2exit_AIX
| | | |____cft2exit_SUN
| | | |____gestidt.c
| | | |____gestidt.h
| | | |____gestidt.o
| | | |____gestidt_AIX
| | | |____gestidt_SUN
| | | |____gestidt_SunOS
| | | |____makefile
| | | |____sem.a
| | | |____ut_sem.c
| | | |____ut_sem.h
| | | |____ut_sem.o
| |____data
| | |____purge.dat
| |____lost+found

person Jorge Vega Sánchez    schedule 15.08.2013    source источник
comment
Это очень сложный и приятный способ, поздравляю. Вы имеете в виду что-то вроде ___dir1 drwxrwxr-x?   -  person fedorqui 'SO stop harming'    schedule 15.08.2013
comment
Ага, именно то, что ты пишешь.   -  person Jorge Vega Sánchez    schedule 15.08.2013


Ответы (2)


Вы можете выполнить ls -ld для каждого результата find. Он даст вам разрешения, другие вещи, а затем имя файла. Если вы затем подключитесь к awk, с помощью awk '{print $NF, $1}' вы сможете распечатать оба блока информации. Наконец, вы подключаетесь к своей команде sed. Все вместе:

find . -type d -exec ls -ld {} \; | awk '{print $NF, $1}' | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

Тест

$ find . -type d -exec ls -ld {} \; | awk '{print $NF, $1}' | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
. drwxrwxr-x
|____python drwxrwxr-x
| |____jinja2 drwxrwxr-x
| | |____bk drwxrwxr-x
| | |____infiles drwxrwxr-x
.......

Маленькими шагами:

$ find . -type d -exec ls -ld {} \;
drwxrwxr-x 7 me me 4096 Aug 15 15:35 .
drwxrwxr-x 3 me me 4096 Aug 13 14:31 ./python
drwxrwxr-x 4 me me 4096 Apr 26 15:14 ./python/jinja2
drwxrwxr-x 2 me me 4096 Apr 19 14:26 ./python/jinja2/bk
drwxrwxr-x 2 me me 4096 Apr 19 12:54 ./python/jinja2/infiles

а потом

$ find . -type d -exec ls -ld {} \; | awk '{print $NF, $1}' 
. drwxrwxr-x
./python drwxrwxr-x
./python/jinja2 drwxrwxr-x
./python/jinja2/bk drwxrwxr-x
./python/jinja2/infiles drwxrwxr-x
person fedorqui 'SO stop harming'    schedule 15.08.2013
comment
не находит вариант '-ls' ?? - person Dru; 16.08.2013
comment
@ Дру, я не знаю. - person fedorqui 'SO stop harming'; 16.08.2013
comment
Есть ли возможность показать папки, а также файлы в свою папку, все с их правами. Я пытаюсь использовать ваше решение в сочетании с этой другой командой find . печать | sed -e's;[^/]*/;|____;g;s;____|; |;g' , но результат не очень. - person Jorge Vega Sánchez; 18.12.2013
comment
@JorgeVegaSánchez Мммм, я не уверен, что понимаю, что ты имеешь в виду. Можете ли вы обновить свой вопрос с помощью примера ввода/вывода? - person fedorqui 'SO stop harming'; 18.12.2013
comment
@JorgeVegaSánchez теперь я понимаю. Но обратите внимание, что мое решение предоставляло права файлов рядом с каждой строкой. При использовании find . -type d -exec ls -ld {} \; они появляются. - person fedorqui 'SO stop harming'; 18.12.2013
comment
Да, я пытаюсь использовать эту часть вашего решения, меняя ls -ld на ls -l, но результат был странным. Я вижу права, но я могу видеть папку группы файлов. - person Jorge Vega Sánchez; 18.12.2013
comment
@JorgeVegaSánchez важно использовать ls -ld, потому что -d дает информацию о каталоге. В противном случае с помощью ls -l вы печатаете содержимое каждого конкретного каталога. - person fedorqui 'SO stop harming'; 18.12.2013
comment
Это основная проблема, объедините оба или что-то в этом роде, чтобы показать папки и файлы с правами на правой стороне. - person Jorge Vega Sánchez; 18.12.2013

В OS X вы можете установить tree, используя homebrew:

brew install tree

или, используя macports:

sudo port install tree

а затем для просмотра каталогов с разрешениями:

$ tree -p -d

Пример вывода:

.
├── [drwxr-xr-x]  folder1
│   └── [drwxr-xr-x]  folder2
│       └── [drwxr-xr-x]  folder3
│           └── [drwxr-xr-x]  folder4
└── [drwxr-xr-x]  folder5
    ├── [drwxr-xr-x]  folder6
    └── [drwxr-xr-x]  folder7
person keyser    schedule 15.08.2013