Mac OS X эквивалент команды Ubuntu â € œtree

Есть ли эквивалент команды Ubuntu tree для Mac OS X?

264 голоса | спросил Misha Moroshko 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 14:38:01 +0400 2011, 14:38:01

13 ответов


370

Да, есть, и он называется tree.

Вы можете установить его

  • из источника или
  • с менеджером пакетов

Первое может показаться немного сложным, если раньше вы не компилировали исходный код. Это требует редактирования нескольких файлов. У последнего немного накладные расходы (потому что вам может не понадобиться менеджер пакетов только для одного инструмента), но обычно проще установить tree и другие пакеты программного обеспечения.


Установка из источника

Сначала вам нужно установить инструменты командной строки Xcode, запустив xcode-select --install.

Затем загрузите источник tree . Затем измените Makefile, чтобы получить его для работы , что также объясняется в @ apuche ответ ниже . Комментировать параметры Linux и раскомментировать параметры OS X должно быть достаточно.

Затем запустите ./configure, затем make.

Теперь вам нужно переместить двоичный файл дерева tree в место, которое находится в вашем исполняемом пути. Например:

sudo mkdir -p /usr /local /bin
sudo cp tree /usr /local /bin /дерево

Теперь отредактируйте свой ~ /.bash_profile, чтобы включить:

export PATH = "/usr /local /bin: $ PATH"

Перезагрузите оболочку, а теперь , дерево должно указывать на /usr /local /bin /tree.


С менеджером пакетов

Существует несколько менеджеров пакетов для OS X. Самые популярные: Homebrew , MacPorts или Fink (отсортировано в порядке, который я бы рекомендовал). Установите один из этих первых - просто установите один , не все.

Затем запустите одну из следующих команд, в зависимости от того, какой менеджер пакетов вы выбрали.

Для Homebrew:

установить дерево установки

Для MacPorts:

Дерево установки порта sudo

Для Fink:

Fink установить дерево

Менеджеры пакетов предлагают другие программы командной строки, включая GNU /Linux, которые по умолчанию не входят в OS X.

ответил slhck 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 14:52:07 +0400 2011, 14:52:07
25

Не совсем то же самое, но один быстрый способ на Mac:

find.

и все. Он будет перечислять все пути к файлам в текущем каталоге в виде списка.

ответил 太極者無極而生 2 Maypm14 2014, 17:31:59
18

Не существует формальной команды tree, но вы можете это сделать:

Сохраните следующий сценарий в /usr /local /bin /tree

#! /Bin /Баш

SEDMAGIC = 'с; [^ /] * /; | ____; г; s; ____ |; |; Г»

если ["$ #" -gt 0]; тогда
   DirList = "$ @"
еще
   DirList = ""
фи

для x в $ dirlist; делать
     найти "$ x" -print | sed -e "$ SEDMAGIC"
сделанный

Измените разрешения, чтобы их можно было запустить:

chmod 755 /usr /local /bin /tree

Конечно, вам, возможно, придется создать /usr /local /bin:

sudo mkdir -p /usr /local /bin /tree
ответил Ahmed Masud 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 14:53:07 +0400 2011, 14:53:07
18

Вероятно, вы должны использовать homebrew . Если вы выполните:

установить дерево установки
ответил nichochar 30 J0000006Europe/Moscow 2016, 19:30:36
16

Или если ваш администратор не позволит вам установить какие-либо из инструментов brew, fink, port, которые вы всегда можете создать из источник:

curl -O ftp://mama.indstate.edu/linux/tree/tree-1.5.3.tgz
tar xzvf tree-1.5.3.tgz
cd tree-1.5.3 /
ls -al

Отредактируйте Makefile для комментирования части Linux и раскомментирования области osx:

# По умолчанию Linux:
# CFLAGS = -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS = 64
# CFLAGS = -O2 -Wall -fomit-frame-pointer -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS = 64
# LDFLAGS = -s

# Uncomment для OS X:
CC = сс
CFLAGS = -O2 -Wall -fomit-frame-pointer -no-cpp-precomp
LDFLAGS =
XOBJS = strverscmp.o

Дополнительно: принудительная цветопередача

И если вы хотите, чтобы дерево всегда раскрашивало вывод, вы всегда можете отредактировать метод main файла tree.c и добавьте force_color = TRUE; до setLocale (LC_TYPE, "");

Наконец, нажмите make, и вы закончили сборку tree для mac.

Дань относится к Шон Чэпмен за свой оригинальный пост в своем блоге.

ответил apouche 15 J000000Sunday12 2012, 03:09:46
5

Альтернатива с помощью find и awk:

#! /Bin /Баш
найти . -print 2> /dev /null | awk '! /\. $ /{\
    для (i = 1; i <NF; i ++) {\
        printf ("% 4s", "|") \
    } \
    print "-" $ NF \
} 'FS =' /'
ответил jweyrich 7 PMpSat, 07 Apr 2012 16:10:48 +040010Saturday 2012, 16:10:48
3

Добавление маленькой точки в ответ @ apuche для OSX El Capitan без корней функция. make install завершается с ошибкой, так как нам не разрешено писать в каталог /usr /bin.

vikas @ MBP: ~ /Downloads /tree-1.7.0 $ sudo make install
Пароль:
установить -d /usr /bin
install: chmod 755 /usr /bin: операция не разрешена
install -d /usr /share /man /man1
если [-e дерево]; тогда \
        установить дерево /usr /bin /tree; \
    фи
install: /usr /bin /tree: операция не разрешена
make: *** [установить] Ошибка 71
Викас @ MBP: ~ /Downloads /дерево-1.7.0 $

Чтобы преодолеть это, просто отредактируйте Makefile, чтобы иметь prefix = /usr /local

ответил vikas027 12 Jam1000000amTue, 12 Jan 2016 06:16:16 +030016 2016, 06:16:16
2

Я добавил следующее в ~ /.bash_profile для использования в Terminal.app. Некоторые комментарии включены, чтобы помнить, как используется поиск.

##########
## tree ##
##########
## пример ...
# | ____ Cycles
# | |. ____ DS_Store
# | | ____ CyclesCards.json
# | | ____ Углерод
# | | | ____ Carbon.json
# alternate: alias tree = 'find. -print | sed -e "s; [^ /] * /; | ____; g; s; ____ |; |; g" '
# использовать $ tree; дерево. ; tree [some-folder-path]
дерево функций {
    найти $ {1: -.} -print | sed -e; [^ /] * /; | ____; g; s; ____ |; |; Г»
}

пример для текущего каталога

$ > дерево

пример для некоторого пути

$ > tree /some /path
ответил l --marc l 5 J0000006Europe/Moscow 2014, 06:20:04
2

Вот решение скрипта Ruby, которое создает приятное дерево Unicode вместе с полезными метаданными.

 #! /usr /bin /env ruby
def tree_hierarchy (root, & children)
  queue = [[root, "", true]]
  [] .tap do | результаты |
    пока queue.empty?
      item, indent, last = queue.pop
      дети = дети [item]
      extra = indent.empty? ? '' : последний ? '' '' '' '': 'â' ââ '' ''
      Результаты <[indent + extra, item]
      Результаты <[indent, nil] если последний и kids.пути?
      отступ + = последний? '': 'â', '
      parts = kids.map {| k | [k, indent, false]} .reverse
      parts.first [2] = true, если только части отсутствуют?
      Детали queue.concat
    конец
  конец
конец
def tree (dir)
  cols = tree_hierarchy (File.expand_path (dir)) do | d |
    File.directory?(d)? Dir.chdir (d) {Dir ['*']. Map (& File.method (: expand_path))}: []
  end.map do | отступ, путь |
    если путь
      file = File.basename (путь) + File.directory?(path)? '/': ''
      meta = `ls -lhd" # {path} "` .split (/\ s + /)
      [[indent, file] .join, meta [0], meta [4], "% s% -2s% s"% meta [5..7]]
    еще
      [Отступ]
    конец
  конец
  maxs = cols.first.zip (* (cols [1 ..- 1])). map {| c | c.compact.map (&: length) .max}
  tmpl = maxs.map.with_index {| n, i | "% # {'-', если cols [0] [i] [/^ \ D /]} # {n} s"} .join ('')
  cols.map {| a | a.length == 1? a.first: tmpl% a}
конец
puts tree (ARGV.first || "."), если __FILE __ == $ 0

Вы можете изменить строку meta = â € |, чтобы извлекать разные метаданные для отображения, вручную выбирая разделенные фрагменты на следующей строке. С немного дополнительной работой вы можете передать произвольные аргументы ls, чтобы выбрать отображаемые метаданные.

Пример вывода (выглядит лучше в терминале OS X, чем шрифт в переполнении стека):

 phrogz $ tree UCC_IVI /
UCC_IVI /drwxr-xr-x 510B 20 ноября 11:07
  â "â" â'd'd ocs /drwxr-xr-x 102B Ноя 20 19:21
  â ", â" "â"'CANMessages.txt -rwxr-xr-x 2.2K 20 ноя 19:21
  â»,
  â "â" Эффекты /drwxr-xr-x 204B Ноя 19 17:19
  â ", â" â "," Depth Of Field HQ Blur.effect -rwxr-xr-x 2.4K 19 ноя 19:19
  â ", â" œ "" FXAA.effect -rwxr-xr-x 1.6K 17 ноя 15:38
  â ", â" œ ""HDRBloomTonemap.effect -rwxr-xr-x 11K 17 ноя 15:38
  â ", â" "â • SMAA1X.effect -rwxr-xr-x 4.4K Ноя 19 17:19
  â»,
  â "â" ''fonts /drwxr-xr-x 136B Ноя 17 15:38
  â ", â" â "," Arimo-Regular.ttf -rwxr-xr-x 43K 17 ноября 15:38
  â ", â" "â •'OFL.txt -rwxr-xr-x 4.3K 17 ноя 15:38
  â»,
  â "ââââ â â â â à /drwxr-xr-x 238B Nov 19 17:19
  â ", â" â "'' alpha-maps /drwxr-xr-x 136B 17 ноября 15:38
  â ", â", â "œ" "arounded-boxes-3.png -rwxr-xr-x 3.6K 17 ноя 15:38
  â ", â", â "" â • splatter-1.png -rwxr-xr-x 35K 17 ноября 15:38
  «,»,
  â ", â" â "Эффекты /drwxr-xr-x 136B Ноя 19 17:19
  â ", â", â "œâ € ''AreaTex-yflipped.dds -rwxr-xr-x 175K Nov 19 17:19
  â ", â", â "" â •SearchTex-yflipped.png -rwxr-xr-x 180B Ноя 19 17:19
  «,»,
  â ", â" â "'IBL /drwxr-xr-x 136B Ноя 17 15:38
  â ", â", â "œâ € '028-hangar.hdr -rwxr-xr-x 1.5M Nov 17 15:38
  â ", â", â "" â •'FieldAirport.hdr -rwxr-xr-x 1.5M Nov 17 15:38
  «,»,
  â ", â" â "â" ¢ ic ic ic x x x x x 238B Ноя 19 17:19
  â ", â", â "â",'icon_climate.dds -rwxr-xr-x 683K 19 ноября 17:19
  â ", â", â "â" ''icon_music.dds -rwxr-xr-x 683K Ноя 19 17:19
  â ", â", â "â",'icon_navigation.dds -rwxr-xr-x 683K Nov 19 17:19
  â ", â", â "â"'icon_phone.dds -rwxr-xr-x 683K Ноя 19 17:19
  â ", â", â "" â •'icon_surroundView.dds -rwxr-xr-x 683K Nov 19 17:19
  «,»,
  â ", â" "â • материалы /drwxr-xr-x 102B ноя 19 17:19
  â ", â" "â • spherical_checker.png -rwxr-xr-x 11K Nov 19 17:19
  â»,
  «материал» /drwxr-xr-x 102B Ноя 19 17:19
  â ", â" "â"'thin_glass_refractive.material -rwxr-xr-x 6.0K Nov 19 17:19
  â»,
  â "â" â "â" • :19 x x x x x 136B Ноя 19 17:19
  â ", â" â "â" BokehParticle /drwxr-xr-x 136B Ноя 19 17:19
  â ", â", â "â", "BokehParticle.import -rwxr-xr-x 739B Ноя 19 17:19
  â ", â", â "" â • teeshes /drwxr-xr-x 102B Nov 19 17:19
  â ", â", â "" â "'Mesh.mesh -rwxr-xr-x 1.1K Nov 19 17:19
  «,»,
  â ", â" "â •'Glass_Button /drwxr-xr-x 136B Nov 19 17:19
  â ", â" œâ € "Glass_Button.import -rwxr-xr-x 1.2K Ноя 19 17:19
  â ", â" "â • teeshes /drwxr-xr-x 136B Nov 19 17:19
  â ", â" œâ "'' GlassButton.mesh -rwxr-xr-x 44K 19 ноября 17:19
  â ", â" "â •'Icon.mesh-rwxr-xr-x 1.8K Ноя 19 17:19
  â»,
  â «â» â · скрипты /drwxr-xr-x 204B Ноя 19 17:19
  â ", â" â "AApp.lua -rwxr-xr-x 764B 17 ноября 15:38
  â ", â" œâ "''CANSim.lua -rwxr-xr-x 29K 17 ноября 15:38
  â ", â" â "," ObjectWiggler.lua -rwxr-xr-x 3.7K Ноя 19 17:19
  â ", â" "â •'PathWiggler.lua -rwxr-xr-x 2.9K 17 ноя 15:38
  â»,
  â «â» •'states /drwxr-xr-x 170B 19 ноября 18:45
  â ", â" â "'app-camera.scxml -rwxr-xr-x 2.4K 20 ноя 11:07
  â ", â" œâ ''app-navigation.scxml -rwxr-xr-x 590B Ноя 19 18:32
  â ", â" "â •'logic.scxml -rwxr-xr-x 4.2K 19 ноября 18:59
  â»,
  â «â» Тесты /drwxr-xr-x 102B Ноя 17 15:38
  â ", â" "â •'interface-navigation.scxml-test -rwxr-xr-x 83B Nov 17 15:38
  â»,
  â «â» • «UCC_IVI.uia -rwxr-xr-x 630B Nov 19 17:32
  â «â» • «UCC_IVI.uia-user -rwxr-xr-x 832B 20 ноября 17:22
  â «œ» • «UCC_IVI.uip -rwxr-xr-x 1.5K 17 ноября 15:38
  â "" â •'UCC_Menu.uip -rwxr-xr-x 33K Nov 19 17:19
ответил Phrogz 27 42014vEurope/Moscow11bEurope/MoscowThu, 27 Nov 2014 22:19:26 +0300 2014, 22:19:26
2

Я нашел здесь простое решение: http://murphymac.com/tree-command -для-MAC /

Поэтому добавление следующего кода в ваш .bashrc, .bash_profile или в любом другом месте заставит его работать:

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

Теперь добавление команды tree будет печататься следующим образом:

# ~ /my-html-app [13:03:45] $ tree
,
| ____ app.js
| ____ CSS
| | ____ main.css
| | ____ theme.css
| ____ index.html
ответил Shashank Agrawal 9 +03002016-10-09T10:34:10+03:00312016bEurope/MoscowSun, 09 Oct 2016 10:34:10 +0300 2016, 10:34:10
1

Это не так красиво, как дерево gnu ... но в bash очень легко получить псевдоним ... Вы даже можете добавить немного цвета, привязав опцию G к цвету ls osx.

alias tree = 'find. -тип d | ls -lARG '
ответил Eddie B 8 J0000006Europe/Moscow 2012, 11:30:13
0

Поздно к игре, но у меня был тот же вопрос. Из-за ограничений на рабочем месте я не мог установить пакет из источника или через сторонний диспетчер пакетов.

Это моя реализация:

# Команда Faux tree в OS X

################################################## ###################
# дерево
# Рекурсивный каталог /список файлов текущего рабочего каталога
#
# tree /Пользователи /foo /foo_dir
# Рекурсивный каталог /список файлов с именованным каталогом, например foo_dir
#
# tree /Система /Библиотека /2
# Рекурсивный каталог /список файлов с именованным каталогом,
# с заданной пользователем глубиной рекурсии, например. 2
################################################## ###################

дерево ()
{
    [-n "$ 2"] & & локальная глубина = "- maxdepth $ 2";
    найдите "$ {1: -.}" $ {depth} -print 2> /dev /null | sed -e; [^ /] * /; | ____; g; s; ____ |; |; Г»
}

Просто добавьте функцию в /Users/foo/.profile или .bash_profile, затем обновите профиль: source .profile или: source .bash_profile

ответил marshki 16 +03002017-10-16T17:50:54+03:00312017bEurope/MoscowMon, 16 Oct 2017 17:50:54 +0300 2017, 17:50:54
0
  1. Установить Xcode

  2. Получить средства командной строки

xcode-select --install
  1. Установить Homebrew
ruby ​​-e "$ (curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. Установить дерево
установить дерево установки
ответил KunMing Xie 21 FebruaryEurope/MoscowbTue, 21 Feb 2017 11:29:03 +0300000000amTue, 21 Feb 2017 11:29:03 +030017 2017, 11:29:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132