Есть ли эквивалент в Ubuntu tree
команды для Mac OS X?
Есть ли эквивалент в Ubuntu tree
команды для Mac OS X?
Ответы:
Вы также можете получить tree
команду на macOS. Если у вас есть Homebrew , все, что вам нужно сделать, это запустить:
brew install tree
Читайте дальше для деталей.
Есть несколько менеджеров пакетов для macOS. Наиболее популярными являются: Homebrew , MacPorts или Fink . Вы можете установить любой из них, но я рекомендую Homebrew. Не устанавливайте более одного из них одновременно!
Следуйте инструкциям на веб-сайте, затем выполните одну из следующих команд, в зависимости от того, какой менеджер пакетов вы выбрали.
Для доморощенного:
brew install tree
Для MacPorts:
sudo port install tree
Для Финка:
fink install tree
Менеджеры пакетов предлагают другие программы командной строки, в том числе GNU / Linux, которые по умолчанию не поставляются с macOS.
Во-первых, вы должны установить инструменты командной строки Xcode, запустив xcode-select --install
.
Затем загрузите tree
исходный код . Затем измените Makefile, чтобы он заработал , что также объясняется в ответе @ apuche ниже . Достаточно закомментировать опции 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
.
make
на OS X не работает. Во-первых, вы должны знать, как установить инструменты командной строки Xcode (или вообще иметь представление о сборке программного обеспечения), а затем вы обнаружите, что оно выдает ошибку на неопределенном символе. Поэтому вы должны внести некоторые изменения в make-файл (как описано здесь ). Слишком много хлопот ИМО.
./configure
и make
именно делать и почему те , необходимы в первую очередь. Или они не хотят иметь дело с этим. Или прочитайте любые файлы справки, в этом отношении. Они бы предпочли сделать что-то подобное apt-get install
. Хорошо, если вы предпочитаете установку из источника (и я лично это делаю), но вы должны признать, что есть решения, которые легче воспринимаются другими или, возможно, даже большинством обычных пользователей компьютеров.
./configure
и как make
делать. Я просто знаю, что это шаги, которые мне нужно выполнить для установки программного обеспечения. Я слепо читаю файлы README и INSTALL и делаю все, что они говорят.
grep
это. Нравится tree | grep -v 'json'
или похоже.
Не совсем то же самое, но один быстрый способ на Mac:
find .
вот и все. Он перечислит все пути к файлам в текущем каталоге в виде списка.
find . -type f
find . -type d -maxdepth 2
find *
если вы не хотите видеть скрытые файлы и каталоги. tree
не показывает скрытые файлы и каталоги по умолчанию.
find
инструмент 万金油.
Или , если администратор не позволит вам установить любой из 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.
Дань идет к Шону Чепмену за его оригинальный пост в своем блоге.
force_color = TRUE;
. Нет точки с запятой, и вы получите ошибку компиляции.
setLocale
нее setlocale
. Итак tree.c
, вы ищете setlocale(LC_TYPE,"")
; и спасибо!
/bin
(или какой-нибудь путь, чтобы его можно было использовать глобально)?
warning: format specifies type 'long' but the argument has type 'long long'
. Исправление было изменить спецификатор формата с %9ld
на %9lld
.
Вы, вероятно, должны использовать доморощенный . Если вы делаете:
brew install tree
Не существует формальной 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
tree
, но все же миленькое решение.
Я нашел простое решение здесь: 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
Добавим небольшую точку к ответу @ apuche для функции без корня OSX El Capitan . 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
./configure --prefix=/usr/local
перед запуском make
и make install
и было бы достичь тех же результатов.
Я добавил следующее в ~ / .bash_profile для использования в 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
Вот сценарий 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, чем шрифт в переполнении стека):
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
Установить Xcode
Получить инструменты командной строки
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
Поздно к игре, но у меня был тот же вопрос. Из-за ограничений на рабочем месте я не смог установить пакет из исходного кода или через сторонний менеджер пакетов.
Это моя реализация:
# 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