Mac OS X эквивалент команды «дерево» Ubuntu

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

Да, есть, и это называется 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/tree 

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

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

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


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

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

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

  brew install tree sudo port install tree fink install tree 

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

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

 find . 

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

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

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

 #!/bin/bash SEDMAGIC='s;[^/]*/;|____;g;s;____|; |;g' if [ "$#" -gt 0 ] ; then dirlist="[email protected]" else dirlist="." fi for x in $dirlist; do find "$x" -print | sed -e "$SEDMAGIC" done 

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

 chmod 755 /usr/local/bin/tree 

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

 sudo mkdir -p /usr/local/bin/tree 

Или, если ваш администратор не позволит вам установить какие-либо инструменты для 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 defaults: #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 for OS X: CC=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.

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

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

 brew install tree 

Альтернатива, использующая find и awk :

 #!/bin/bash find . -print 2>/dev/null | awk '!/\.$/ { \ for (i=1; i<NF; i++) { \ printf("%4s", "|") \ } \ print "-- "$NF \ }' FS='/' 

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

 [email protected]:~/Downloads/tree-1.7.0$ sudo make install Password: install -d /usr/bin install: chmod 755 /usr/bin: Operation not permitted install -d /usr/share/man/man1 if [ -e tree ]; then \ install tree /usr/bin/tree; \ fi install: /usr/bin/tree: Operation not permitted make: *** [install] Error 71 [email protected]:~/Downloads/tree-1.7.0$ 

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

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

 #!/usr/bin/env ruby def tree_hierarchy( root, &children ) queue = [[root,"",true]] [].tap do |results| until queue.empty? item,indent,last = queue.pop kids = children[item] extra = indent.empty? ? '' : last ? '└╴' : '├╴' results << [ indent+extra, item ] results << [ indent, nil ] if last and kids.empty? indent += last ? ' ' : '│ ' parts = kids.map{ |k| [k,indent,false] }.reverse parts.first[2] = true unless parts.empty? queue.concat parts end end end 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 |indent,path| if path file = File.basename(path) + File.directory?(path) ? '/' : '' meta = `ls -lhd "#{path}"`.split(/\s+/) [ [indent,file].join, meta[0], meta[4], "%s %-2s %s" % meta[5..7] ] else [indent] end end maxs = cols.first.zip(*(cols[1..-1])).map{ |c| c.compact.map(&:length).max } tmpl = maxs.map.with_index{ |n,i| "%#{'-' if cols[0][i][/^\D/]}#{n}s" }.join(' ') cols.map{ |a| a.length==1 ? a.first : tmpl % a } end puts tree(ARGV.first || ".") if __FILE__==$0 

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

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

 phrogz$ tree UCC_IVI/ UCC_IVI/ drwxr-xr-x 510B Nov 20 11:07 ├╴docs/ drwxr-xr-x 102B Nov 20 19:21 │ └╴CANMessages.txt -rwxr-xr-x 2.2K Nov 20 19:21 │ ├╴effects/ drwxr-xr-x 204B Nov 19 17:19 │ ├╴Depth Of Field HQ Blur.effect -rwxr-xr-x 2.4K Nov 19 17:19 │ ├╴FXAA.effect -rwxr-xr-x 1.6K Nov 17 15:38 │ ├╴HDRBloomTonemap.effect -rwxr-xr-x 11K Nov 17 15:38 │ └╴SMAA1X.effect -rwxr-xr-x 4.4K Nov 19 17:19 │ ├╴fonts/ drwxr-xr-x 136B Nov 17 15:38 │ ├╴Arimo-Regular.ttf -rwxr-xr-x 43K Nov 17 15:38 │ └╴OFL.txt -rwxr-xr-x 4.3K Nov 17 15:38 │ ├╴maps/ drwxr-xr-x 238B Nov 19 17:19 │ ├╴alpha-maps/ drwxr-xr-x 136B Nov 17 15:38 │ │ ├╴rounded-boxes-3.png -rwxr-xr-x 3.6K Nov 17 15:38 │ │ └╴splatter-1.png -rwxr-xr-x 35K Nov 17 15:38 │ │ │ ├╴effects/ drwxr-xr-x 136B Nov 19 17:19 │ │ ├╴AreaTex-yflipped.dds -rwxr-xr-x 175K Nov 19 17:19 │ │ └╴SearchTex-yflipped.png -rwxr-xr-x 180B Nov 19 17:19 │ │ │ ├╴IBL/ drwxr-xr-x 136B Nov 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 │ │ │ ├╴icons/ drwxr-xr-x 238B Nov 19 17:19 │ │ ├╴icon_climate.dds -rwxr-xr-x 683K Nov 19 17:19 │ │ ├╴icon_music.dds -rwxr-xr-x 683K Nov 19 17:19 │ │ ├╴icon_navigation.dds -rwxr-xr-x 683K Nov 19 17:19 │ │ ├╴icon_phone.dds -rwxr-xr-x 683K Nov 19 17:19 │ │ └╴icon_surroundView.dds -rwxr-xr-x 683K Nov 19 17:19 │ │ │ └╴materials/ drwxr-xr-x 102B Nov 19 17:19 │ └╴spherical_checker.png -rwxr-xr-x 11K Nov 19 17:19 │ ├╴materials/ drwxr-xr-x 102B Nov 19 17:19 │ └╴thin_glass_refractive.material -rwxr-xr-x 6.0K Nov 19 17:19 │ ├╴models/ drwxr-xr-x 136B Nov 19 17:19 │ ├╴BokehParticle/ drwxr-xr-x 136B Nov 19 17:19 │ │ ├╴BokehParticle.import -rwxr-xr-x 739B Nov 19 17:19 │ │ └╴meshes/ 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 Nov 19 17:19 │ └╴meshes/ drwxr-xr-x 136B Nov 19 17:19 │ ├╴GlassButton.mesh -rwxr-xr-x 44K Nov 19 17:19 │ └╴Icon.mesh -rwxr-xr-x 1.8K Nov 19 17:19 │ ├╴scripts/ drwxr-xr-x 204B Nov 19 17:19 │ ├╴App.lua -rwxr-xr-x 764B Nov 17 15:38 │ ├╴CANSim.lua -rwxr-xr-x 29K Nov 17 15:38 │ ├╴ObjectWiggler.lua -rwxr-xr-x 3.7K Nov 19 17:19 │ └╴PathWiggler.lua -rwxr-xr-x 2.9K Nov 17 15:38 │ ├╴states/ drwxr-xr-x 170B Nov 19 18:45 │ ├╴app-camera.scxml -rwxr-xr-x 2.4K Nov 20 11:07 │ ├╴app-navigation.scxml -rwxr-xr-x 590B Nov 19 18:32 │ └╴logic.scxml -rwxr-xr-x 4.2K Nov 19 18:59 │ ├╴tests/ drwxr-xr-x 102B Nov 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 Nov 20 17:22 ├╴UCC_IVI.uip -rwxr-xr-x 1.5K Nov 17 15:38 └╴UCC_Menu.uip -rwxr-xr-x 33K Nov 19 17:19 

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

 alias tree='find . -type d | ls -lARG' 

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

 ########## ## tree ## ########## ## example ... #|____Cycles #| |____.DS_Store #| |____CyclesCards.json #| |____Carbon #| | |____Carbon.json # alternate: alias tree='find . -print | sed -e "s;[^/]*/;|____;g;s;____|; |;g"' # use$ tree ; tree . ; tree [some-folder-path] function tree { find ${1:-.} -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' } 

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

 $> tree 

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

 $> tree /some/path 

Я нашел здесь простое решение: http://murphymac.com/tree-command-for-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 
  1. Установить Xcode

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

    xcode-select --install

  3. Установить Homebrew

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  4. Установить дерево

    brew install tree

Interesting Posts

Два основных действия в AndroidManifest.xml

Улучшение производительности объемной вставки в инфраструктуре Entity

Сделайте div div двумя строками в сетке

Могу ли я последовательно переключать асинхронную задачу (начиная с одной после завершения предыдущей асинтезы)

Matlab 2012a с Windows SDK 7.1

Почему мой счетчик Bash сбрасывается после цикла while

Соединяться между таблицами в двух разных базах данных?

Шаги, необходимые для использования базы данных MySQL в Play Framework 2.0

Преобразование SVG в PNG с использованием C #

Почему эта программа Java заканчивается, несмотря на то, что, по-видимому, она не должна (а не)?

Почему C ++ требует, чтобы пользовательский конструктор по умолчанию устанавливал по умолчанию объект const?

Android – установка текста в TextView

codeigniter Ошибка CSRF: «Запрошенное действие не разрешено».

В чем смысл System.out.println в Java?

Предупреждение о подтверждении SSL: ошибка unrecognized_name с момента обновления до версии 1.7.7

Давайте будем гением компьютера.