2011-11-21 10:38:01 +0000 2011-11-21 10:38:01 +0000
330
330

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

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

Ответы (13)

460
460
460
2011-11-21 10:52:07 +0000

Команду tree можно получить и в макросе. Если у вас есть Homebrew , все, что вам нужно сделать, это запустить:

brew install tree

Читайте дальше для подробностей.

  • *

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

Есть несколько менеджеров пакетов для MacOS. Самые популярные из них: Homebrew , MacPorts , или Fink . Вы можете установить любой из них, но я рекомендую Homebrew. Не устанавливайте более одного из них одновременно!

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

Для Homebrew:

brew install tree

Для MacPorts:

sudo port install tree

For Fink:

fink install tree

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

Установка из исходников

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

Затем, скачайте исходники tree . Затем измените Makefile, чтобы он заработал , что также объясняется в @apuche’s answer below . Комментируя опции Linux и не комментируя опции macOS, должно быть достаточно.

Затем запустите ./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.

36
36
36
2014-05-02 13:31:59 +0000

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

find .

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

22
22
22
2012-07-14 23:09:46 +0000

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

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

Необязательно: Принудительный вывод

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

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

Tribute переходит в Shaun Chapman для его оригинального сообщения в блоге.

21
21
21
2016-06-30 16:30:36 +0000

Наверное, тебе стоит использовать доморощенный . Если вы используете:

brew install tree
18
18
18
2011-11-21 10:53:07 +0000

Официальной команды tree как таковой нет, однако вы можете это сделать:

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

#!/bin/bash

SEDMAGIC='s;[^/]*/;| ____;g;s;____ |; |;g'

if ["$#" -gt 0] ; then
   dirlist="$@"
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
6
6
6
2012-04-07 12:10:48 +0000

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

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

Я нашел простое решение: 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
3
3
3
2016-01-12 03:16:16 +0000

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

vikas@MBP:~/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
vikas@MBP:~/Downloads/tree-1.7.0$

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

2
2
2
2014-11-27 19:19:26 +0000

Вот решение для скриптов 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
2
2
2
2014-06-05 02:20:04 +0000

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

##########
## 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
1
1
1
2012-06-08 07:30:13 +0000

Он не такой красивый, как дерево гну… но его очень легко выставить под псевдонимом в стиле бэш… Вы даже можете добавить немного цвета, прикрепив опцию G к цвету osx’s ls.

alias tree='find . -type d | ls -lARG'
```.
1
1
1
2017-02-21 08:29:03 +0000
  1. Установите Xcode

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

xcode-select --install
  1. Установите Homebrew

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

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```.
0
0
0
2017-10-16 14:50:54 +0000

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

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

# Faux tree command in OS X                                      

#####################################################################
# tree
# Recursive directory/file listing of present working directory 
#
# tree /Users/foo/foo_dir
# Recursive directory/file listing of named directory, e.g foo_dir
#
# tree /System/Library/ 2
# Recursive directory/file listing of named directory, 
# with-user defined depth of recursion, e.g. 2 
#####################################################################

tree ()
{
    [-n "$2"] && local depth="-maxdepth $2";
    find "${1:-.}" ${depth} -print 2> /dev/null | sed -e 's;[^/]*/;| ____;g;s;____ |; |;g'
}

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

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

12
5
8
21
4