Команда tree в Linux

Опубликовано admin - сб, 09/10/2022 - 16:46

В Linux команда tree используется для рекурсивного вывода структуры каталогов или отображения содержимого каталогов в древовидном формате.

Примеры использования команды tree в Linux

Команда выводит пути к каталогам и файлам в каждом подкаталоге, а также данные об общем количестве подкаталогов и файлов.

Содержание

Синтаксис

tree [опции]

Опции

Варианты листинга:

-a
Перечислить все файлы
-d
Только список каталогов
-l
Следовать символическим ссылкам, ведущим к каталогам
-f
Вывести префикс полного пути для каждого файла
-x
Оставаться только в текущей файловой системе
-L level
Опускаться только на нижние уровни каталогов
-R
Перезапустить команду, когда будет достигнут максимальный уровень каталога
-P pattern
Перечислить только те файлы, которые соответствуют заданному шаблону
-I pattern
Не перечислять файлы, соответствующие заданному шаблону
-o filename
Вывод в файл вместо стандартного вывода

 
Параметры файлов:

-q
Вывести непечатаемые символы как ?
-N
Вывести непечатаемые символы как есть
-Q
Заключить имена файлов в двойные кавычки
-p
Вывести список разрешений для каждого файла
-u
Отобразить владельца файла или номер UID
-g
Отобразить владельца файловой группы или номер GID.
-s
Вывести размер в байтах каждого файла
-h
Вывести размер более понятным для человека способом
-D
Вывести дату последнего изменения или изменения статуса (с опцией -c)
-F
Добавить /, =, *, @, | или >
  --inode
Вывести номер индексного дескриптора каждого файла
  --device
Вывести идентификационный номер устройства, которому принадлежит каждый файл

 
Параметры сортировки:

-v
Сортировать файлы в алфавитно-цифровом порядке по версии
-t
Сортировать файлы по времени последнего изменения
-c
Сортировать файлы по времени последнего изменения статуса
-U
Оставлять файлы несортированными
-r
Обратный порядок сортировки
  --dirsfirst
Список каталогов перед файлами (-U отключена)
  --filesfirst
Список файлов перед каталогами (-U отключена)

 
Параметры графики:

-i
Не выводить линии отступа
-n
Всегда отключать раскрашивание
-C
Всегда включать раскрашивание

Установка

Утилита в дистрибутивах Linux не предустановлена. Её необходимо устанавливать самостоятельно, но установка её очень проста.

В Arch Linux:

$ sudo pacman -S tree

В Ubuntu:

$ sudo apt install tree

Примеры использования команды tree в Linux

Без параметров

Для просмотра содержимого каталога в древовидном формате, перейдите в нужный каталог и запустите команду tree без каких-либо параметров:

oleg@mobile:~/Apps/XEP:$ tree
.
├── doc
│   ├── intro.html
│   ├── intro.pdf
│   ├── PNGgraphics
│   │   ├── BackendsAFPConfig.png
│   │   ├── BackendsPDFConfig.png
│   │   ├── BackendsPSConfig.png
│   │   ├── FontsConfig.png
│   │   ├── Formatting.png
│   │   ├── LanguagesConfig.png
│   │   ├── MainConfig.png
│   │   ├── OpenFile.png
│   │   ├── Parameters.png
│   │   ├── renderx1.png
│   │   ├── renderx2.png
│   │   └── SelectFont.png
│   ├── reference.html
│   ├── reference.pdf
│   ├── tutorial.html
│   ├── tutorial.pdf
│   ├── WhatsNew.txt
│   ├── XEPUserGuide.html
│   └── XEPUserGuide.pdf
├── examples
│   ├── basic
│   │   ├── bgimage.fo
│   │   ├── borders.fo
│   │   ├── color.fo
│   │   ├── columns.fo
│   │   ├── Images
│   │   │   └── spots.jpg
│   │   ├── inline-borders.fo
│   │   ├── linebreak.fo
│   │   ├── lists.fo
│   │   ├── padding.fo
│   │   └── table_spans.fo
│   ├── charsets
│   │   ├── adobe-standard.fo
│   │   ├── phonetic.fo
│   │   ├── symbol.fo
│   │   └── zapf-dingbats.fo
│   ├── hammer
│   │   ├── hammer.xml
│   │   ├── hammer.xsl
│   │   └── Images
│   │       ├── box.jpg
│   │       ├── brick.jpg
│   │       ├── can.jpg
│   │       ├── hammer.jpg
│   │       ├── nail.jpg
│   │       ├── plank.jpg
│   │       └── screw.jpg
│   └── xmlspec
│       ├── readme.txt
│       ├── w3c.gif
│       ├── xml2e.xml
│       ├── xmlspec20.xsl
│       ├── xmlspec.dtd
│       ├── xpath.xml
│       └── xslt.xml
├── fonts
│   ├── arialbd.ttf
│   ├── arialbi.ttf
│   ├── ariali.ttf
│   ├── arial.ttf
│   ├── courbd.ttf
│   ├── courbi.ttf
│   ├── Courier.afm
│   ├── Courier-Bold.afm
│   ├── Courier-BoldOblique.afm
│   ├── Courier-Oblique.afm
│   ├── couri.ttf
│   ├── cour.ttf
│   ├── Helvetica.afm
│   ├── Helvetica-Bold.afm
│   ├── Helvetica-BoldOblique.afm
│   ├── Helvetica-Oblique.afm
│   ├── IPA.afm
│   ├── IPA.glyphs
│   ├── IPA.pfa
│   ├── palabi.ttf
│   ├── palab.ttf
│   ├── palai.ttf
│   ├── pala.ttf
│   ├── Symbol.afm
│   ├── tahomabd.ttf
│   ├── tahoma.ttf
│   ├── timesbd.ttf
│   ├── timesbi.ttf
│   ├── Times-Bold.afm
│   ├── Times-BoldItalic.afm
│   ├── Times-Italic.afm
│   ├── timesi.ttf
│   ├── Times-Roman.afm
│   ├── times.ttf
│   ├── verdanab.ttf
│   ├── verdanai.ttf
│   ├── verdana.ttf
│   ├── verdanaz.ttf
│   └── ZapfDingbats.afm
├── hyphen
│   ├── dehyph_rx.tex
│   ├── eshyph_rx.tex
│   ├── frhyph_rx.tex
│   ├── hyphen.tex
│   ├── plhyph_rx.tex
│   ├── ruhyphal.tex
│   └── ukhyphen.tex
├── images
│   ├── 404.gif
│   ├── colorbar.svg
│   ├── logo-renderx.svg
│   └── registration.svg
├── lib
│   ├── crimson.jar
│   ├── saxon.jar
│   ├── setupJEditPlugin.jar
│   ├── x4u.jar
│   ├── xep.jar
│   ├── XEPTask.jar
│   └── xt.jar
├── license.xml
├── readme.txt
├── validate
├── x4u
├── xep
├── xep.xml
└── xep.xml.old

13 directories, 115 files
oleg@mobile:~/Apps/XEP:$

Команда вывела содержимое рабочего каталога, рекурсивно показывая подкаталоги и файлы, а также данные об общем количестве подкаталогов и файлов.

Не забудьте вызвать sudo для запуска дерева в каталоге, для которого требуются права доступа пользователя root.

Включение в вывод скрытых файлов

Для включения в вывод скрытых файлов используется опция -a:

oleg@mobile:~:$ tree -ax
.
├── abc.txt
├── Apps
├── .asoundrc
├── .asoundrc.asoundconf
├── .aspell.en.prepl
├── .audacity-data
├── aur
├── backgrounds
├── .bash_history
├── .bash_profile
├── .bashrc
├── bin
├── build
├── .cache
├── .calc_history
├── .claws-mail
├── .config
...
├── .wxcam
├── .Xauthority
├── .xbindkeysrc
├── .XCompose
├── xep
├── .xine
├── .xinitrc
├── .xscreensaver
├── .xsession
├── .xwmconfig
├── Yandex.Disk
├── .yarnrc

65 directories, 29 files

В данном случае я добавил также опцию  -x, чтобы не выполнялась рекурсия.

С префиксом полного пути

Для просмотра содержимое каталога с префиксом полного пути для каждого подкаталога и файла используется опция -f:

oleg@mobile:~/Apps/XEP:$ tree -f
.
├── ./doc
│   ├── ./doc/intro.html
│   ├── ./doc/intro.pdf
│   ├── ./doc/PNGgraphics
...
│   ├── ./doc/reference.html
│   ├── ./doc/reference.pdf
│   ├── ./doc/tutorial.html
│   ├── ./doc/tutorial.pdf
│   ├── ./doc/WhatsNew.txt
│   ├── ./doc/XEPUserGuide.html
│   └── ./doc/XEPUserGuide.pdf
├── ./examples
...
├── ./fonts
...
├── ./hyphen
│   ├── ./hyphen/dehyph_rx.tex
│   ├── ./hyphen/eshyph_rx.tex
│   ├── ./hyphen/frhyph_rx.tex
│   ├── ./hyphen/hyphen.tex
│   ├── ./hyphen/plhyph_rx.tex
│   ├── ./hyphen/ruhyphal.tex
│   └── ./hyphen/ukhyphen.tex
├── ./images
│   ├── ./images/404.gif
│   ├── ./images/colorbar.svg
│   ├── ./images/logo-renderx.svg
│   └── ./images/registration.svg
├── ./lib
│   ├── ./lib/crimson.jar
│   ├── ./lib/saxon.jar
│   ├── ./lib/setupJEditPlugin.jar
│   ├── ./lib/x4u.jar
│   ├── ./lib/xep.jar
│   ├── ./lib/XEPTask.jar
│   └── ./lib/xt.jar
├── ./license.xml
├── ./readme.txt
├── ./validate
├── ./x4u
├── ./xep
├── ./xep.xml
└── ./xep.xml.old

13 directories, 115 files
oleg@mobile:~/Apps/XEP:$

Только подкаталоги

Вы также можете указать дереву печатать только подкаталоги без файлов в них, используя опцию -d. При использовании вместе с опцией -f будет выводиться полный путь к каталогу:

oleg@mobile:~/Apps/XEP:$ tree -df
.
├── ./doc
│   └── ./doc/PNGgraphics
├── ./examples
│   ├── ./examples/basic
│   │   └── ./examples/basic/Images
│   ├── ./examples/charsets
│   ├── ./examples/hammer
│   │   └── ./examples/hammer/Images
│   └── ./examples/xmlspec
├── ./fonts
├── ./hyphen
├── ./images
└── ./lib

13 directories
oleg@mobile:~/Apps/XEP:$

Ограничение глубины отображения дерева

Для ограничения максимальной глубины отображения дерева каталогов используется опция -L с добавлением цифрового указания глубины:

oleg@mobile:~/Apps/XEP:$ tree -f -L 2
.
├── ./doc
│   ├── ./doc/intro.html
│   ├── ./doc/intro.pdf
│   ├── ./doc/PNGgraphics
│   ├── ./doc/reference.html
│   ├── ./doc/reference.pdf
│   ├── ./doc/tutorial.html
│   ├── ./doc/tutorial.pdf
│   ├── ./doc/WhatsNew.txt
│   ├── ./doc/XEPUserGuide.html
│   └── ./doc/XEPUserGuide.pdf
├── ./examples
│   ├── ./examples/basic
│   ├── ./examples/charsets
│   ├── ./examples/hammer
│   └── ./examples/xmlspec
├── ./fonts
...
├── ./hyphen
│   ├── ./hyphen/dehyph_rx.tex
│   ├── ./hyphen/eshyph_rx.tex
│   ├── ./hyphen/frhyph_rx.tex
│   ├── ./hyphen/hyphen.tex
│   ├── ./hyphen/plhyph_rx.tex
│   ├── ./hyphen/ruhyphal.tex
│   └── ./hyphen/ukhyphen.tex
├── ./images
│   ├── ./images/404.gif
│   ├── ./images/colorbar.svg
│   ├── ./images/logo-renderx.svg
│   └── ./images/registration.svg
├── ./lib
│   ├── ./lib/crimson.jar
│   ├── ./lib/saxon.jar
│   ├── ./lib/setupJEditPlugin.jar
│   ├── ./lib/x4u.jar
│   ├── ./lib/xep.jar
│   ├── ./lib/XEPTask.jar
│   └── ./lib/xt.jar
├── ./license.xml
├── ./readme.txt
├── ./validate
├── ./x4u
├── ./xep
├── ./xep.xml
└── ./xep.xml.old

11 directories, 73 files
oleg@mobile:~/Apps/XEP:$

Максимальная глубина отображения дерева каталогов была установлена на 2.

Вывод файлов по шаблону

Для отображения только тех файлов, которые соответствуют шаблону подстановочных знаков, используется опция -P и указывается шаблон:

oleg@mobile:~/Apps/XEP:$ tree -f -P *.ttf
.
├── ./doc
│   └── ./doc/PNGgraphics
├── ./examples
│   ├── ./examples/basic
│   │   └── ./examples/basic/Images
│   ├── ./examples/charsets
│   ├── ./examples/hammer
│   │   └── ./examples/hammer/Images
│   └── ./examples/xmlspec
├── ./fonts
│   ├── ./fonts/arialbd.ttf
│   ├── ./fonts/arialbi.ttf
│   ├── ./fonts/ariali.ttf
│   ├── ./fonts/arial.ttf
│   ├── ./fonts/courbd.ttf
│   ├── ./fonts/courbi.ttf
│   ├── ./fonts/couri.ttf
│   ├── ./fonts/cour.ttf
│   ├── ./fonts/palabi.ttf
│   ├── ./fonts/palab.ttf
│   ├── ./fonts/palai.ttf
│   ├── ./fonts/pala.ttf
│   ├── ./fonts/tahomabd.ttf
│   ├── ./fonts/tahoma.ttf
│   ├── ./fonts/timesbd.ttf
│   ├── ./fonts/timesbi.ttf
│   ├── ./fonts/timesi.ttf
│   ├── ./fonts/times.ttf
│   ├── ./fonts/verdanab.ttf
│   ├── ./fonts/verdanai.ttf
│   ├── ./fonts/verdana.ttf
│   └── ./fonts/verdanaz.ttf
├── ./hyphen
├── ./images
└── ./lib

13 directories, 22 files
oleg@mobile:~/Apps/XEP:$

В этом примере для отображения файлов был использован шаблон *.ttf.

Удаление пустых каталогов из вывода

Вы можете указать дереву удалять пустые каталоги из вывода, добавив опцию --prune:

oleg@mobile:~/Apps/XEP:$ tree -f -P *.ttf --prune
.
└── ./fonts
    ├── ./fonts/arialbd.ttf
    ├── ./fonts/arialbi.ttf
    ├── ./fonts/ariali.ttf
    ├── ./fonts/arial.ttf
    ├── ./fonts/courbd.ttf
    ├── ./fonts/courbi.ttf
    ├── ./fonts/couri.ttf
    ├── ./fonts/cour.ttf
    ├── ./fonts/palabi.ttf
    ├── ./fonts/palab.ttf
    ├── ./fonts/palai.ttf
    ├── ./fonts/pala.ttf
    ├── ./fonts/tahomabd.ttf
    ├── ./fonts/tahoma.ttf
    ├── ./fonts/timesbd.ttf
    ├── ./fonts/timesbi.ttf
    ├── ./fonts/timesi.ttf
    ├── ./fonts/times.ttf
    ├── ./fonts/verdanab.ttf
    ├── ./fonts/verdanai.ttf
    ├── ./fonts/verdana.ttf
    └── ./fonts/verdanaz.ttf

1 directory, 22 files
oleg@mobile:~/Apps/XEP:$

Разрешения для файлов

Для вывода разрешений для каждого файла используется опция -p:

oleg@mobile:~/Apps/FreeShip:$ tree -fp
[drwxr-xr-x]  .
├── [drwxr-xr-x]  ./Exec
├── [drwxr-xr-x]  ./Export
├── [-rwxrwxr-x]  ./FreeShip
├── [-rw-r--r--]  ./hulls.zip
├── [drwxr-xr-x]  ./Import
...
├── [drwxr-xr-x]  ./Languages
...
├── [drwxr-xr-x]  ./Manuals
│   ├── [-rw-r--r--]  ./Manuals/English.pdf
│   ├── [-rw-r--r--]  ./Manuals/Francais.pdf
│   ├── [-rw-r--r--]  ./Manuals/ReadMe1st.txt
│   ├── [-rw-r--r--]  ./Manuals/Russian.pdf
│   ├── [-rw-r--r--]  ./Manuals/Spanish.pdf
│   ├── [-rw-r--r--]  ./Manuals/Ukrainian.pdf
│   └── [-rw-r--r--]  ./Manuals/Vietnamese.pdf
├── [drwxr-xr-x]  ./Ships
├── [drwxr-xr-x]  ./Temp
└── [-rwxr-xr-x]  ./uninstall-user.sh

8 directories, 157 files
oleg@mobile:~/Apps/FreeShip:$

Имя пользователя или UID

Для вывода имени пользователя используется опция -u. Можно также добавить и имя группы (GID), используя опцию -g:

oleg@mobile:~/Apps/FreeShip:$ tree -fpug
[drwxr-xr-x oleg     100     ]  .
├── [drwxr-xr-x oleg     100     ]  ./Exec
├── [drwxr-xr-x oleg     100     ]  ./Export
├── [-rwxrwxr-x oleg     100     ]  ./FreeShip
├── [-rw-r--r-- oleg     100     ]  ./hulls.zip
├── [drwxr-xr-x oleg     100     ]  ./Import
...
├── [drwxr-xr-x oleg     100     ]  ./Languages
...
├── [drwxr-xr-x oleg     100     ]  ./Manuals
│   ├── [-rw-r--r-- oleg     100     ]  ./Manuals/English.pdf
│   ├── [-rw-r--r-- oleg     100     ]  ./Manuals/Francais.pdf
│   ├── [-rw-r--r-- oleg     100     ]  ./Manuals/ReadMe1st.txt
│   ├── [-rw-r--r-- oleg     100     ]  ./Manuals/Russian.pdf
│   ├── [-rw-r--r-- oleg     100     ]  ./Manuals/Spanish.pdf
│   ├── [-rw-r--r-- oleg     100     ]  ./Manuals/Ukrainian.pdf
│   └── [-rw-r--r-- oleg     100     ]  ./Manuals/Vietnamese.pdf
├── [drwxr-xr-x oleg     100     ]  ./Ships
├── [drwxr-xr-x oleg     100     ]  ./Temp
└── [-rwxr-xr-x oleg     100     ]  ./uninstall-user.sh

8 directories, 157 files
oleg@mobile:~/Apps/FreeShip:$

Размер файлов в удобном формате

Для вывода размера каждого файла в удобном для человека формате используется опция -h:

oleg@mobile:~/Apps/FreeShip:$ tree -fpug -h
[drwxr-xr-x oleg     100      4.0K]  .
├── [drwxr-xr-x oleg     100      4.0K]  ./Exec
├── [drwxr-xr-x oleg     100      4.0K]  ./Export
├── [-rwxrwxr-x oleg     100       28M]  ./FreeShip
├── [-rw-r--r-- oleg     100      4.9M]  ./hulls.zip
├── [drwxr-xr-x oleg     100      4.0K]  ./Import
...
├── [drwxr-xr-x oleg     100      4.0K]  ./Languages
...
├── [drwxr-xr-x oleg     100      4.0K]  ./Manuals
│   ├── [-rw-r--r-- oleg     100      3.3M]  ./Manuals/English.pdf
│   ├── [-rw-r--r-- oleg     100      2.8M]  ./Manuals/Francais.pdf
│   ├── [-rw-r--r-- oleg     100       201]  ./Manuals/ReadMe1st.txt
│   ├── [-rw-r--r-- oleg     100      2.3M]  ./Manuals/Russian.pdf
│   ├── [-rw-r--r-- oleg     100      7.6M]  ./Manuals/Spanish.pdf
│   ├── [-rw-r--r-- oleg     100      2.5M]  ./Manuals/Ukrainian.pdf
│   └── [-rw-r--r-- oleg     100      2.3M]  ./Manuals/Vietnamese.pdf
├── [drwxr-xr-x oleg     100      4.0K]  ./Ships
├── [drwxr-xr-x oleg     100      4.0K]  ./Temp
└── [-rwxr-xr-x oleg     100      3.6K]  ./uninstall-user.sh

8 directories, 157 files
oleg@mobile:~/Apps/FreeShip:$

Дата последнего изменения

Для отображения даты последнего изменения для каждого подкаталога или файла используется опция -D:

oleg@mobile:~/Apps/FreeShip:$ tree -fpug -h -D
[drwxr-xr-x oleg     100      4.0K Aug 23  2017]  .
├── [drwxr-xr-x oleg     100      4.0K Aug 23  2017]  ./Exec
├── [drwxr-xr-x oleg     100      4.0K Aug 23  2017]  ./Export
├── [-rwxrwxr-x oleg     100       28M Apr  6  2015]  ./FreeShip
├── [-rw-r--r-- oleg     100      4.9M Aug 23  2017]  ./hulls.zip
├── [drwxr-xr-x oleg     100      4.0K Aug 23  2017]  ./Import
...
├── [drwxr-xr-x oleg     100      4.0K Aug 23  2017]  ./Languages
...
├── [drwxr-xr-x oleg     100      4.0K Aug 23  2017]  ./Manuals
│   ├── [-rw-r--r-- oleg     100      3.3M Aug 23  2017]  ./Manuals/English.pdf
│   ├── [-rw-r--r-- oleg     100      2.8M Aug 23  2017]  ./Manuals/Francais.pdf
│   ├── [-rw-r--r-- oleg     100       201 Aug 23  2017]  ./Manuals/ReadMe1st.txt
│   ├── [-rw-r--r-- oleg     100      2.3M Aug 23  2017]  ./Manuals/Russian.pdf
│   ├── [-rw-r--r-- oleg     100      7.6M Aug 23  2017]  ./Manuals/Spanish.pdf
│   ├── [-rw-r--r-- oleg     100      2.5M Aug 23  2017]  ./Manuals/Ukrainian.pdf
│   └── [-rw-r--r-- oleg     100      2.3M Aug 23  2017]  ./Manuals/Vietnamese.pdf
├── [drwxr-xr-x oleg     100      4.0K Aug 23  2017]  ./Ships
├── [drwxr-xr-x oleg     100      4.0K Aug 23  2017]  ./Temp
└── [-rwxr-xr-x oleg     100      3.6K Aug 23  2017]  ./uninstall-user.sh

8 directories, 157 files
oleg@mobile:~/Apps/FreeShip:$

Вывод дерева в файл

Вы можете вывести дерево в файл для последующего анализа, используя опцию -o:

oleg@mobile:~/Apps/FreeShip:$ tree -fpug -h -D -o ~/tree.txt
oleg@mobile:~/Apps/FreeShip:$

Проверяем:

oleg@mobile:~/Apps/FreeShip:$ ls -l ~/tree.txt
-rw-r--r-- 1 oleg users 14856 сен 10 16:26 /home/oleg/tree.txt
oleg@mobile:~/Apps/FreeShip:$

 
Итоги

Несомненно, команда tree в Linux окажет серьёзную помощь многим пользователям. Использование её в работе не представляет особых сложностей.

Поделиться с друзьями