Mac OS X jest odpowiednikiem polecenia "tree" Ubuntu
Czy istnieje odpowiednik polecenia Ubuntu tree
dla Mac OS X?
Czy istnieje odpowiednik polecenia Ubuntu tree
dla Mac OS X?
Polecenie tree
można też uzyskać na MacOSie. Jeśli masz Homebrew , wszystko co musisz zrobić to uruchomić:
brew install tree
Przeczytaj dalej po szczegóły.
Istnieje kilka menedżerów pakietów dla MacOS. Najbardziej popularne z nich to: Homebrew , MacPorts , lub Fink . Możesz zainstalować jeden z nich, ale ja polecam Homebrew. Nie instaluj więcej niż jednego z nich w tym samym czasie!
Postępuj zgodnie z instrukcjami na stronie, a następnie wykonaj jedno z poniższych poleceń, w zależności od wybranego menedżera pakietów.
For Homebrew:
brew install tree
For MacPorts:
sudo port install tree
For Fink:
fink install tree
Menedżery pakietów oferują inne programy z linii poleceń, w tym GNU/Linux, które nie są domyślnie dostarczane z systemem MacOS.
Najpierw należy zainstalować narzędzia z linii poleceń Xcode, uruchamiając xcode-select --install
.
Następnie, pobierz źródło tree
. Następnie zmień Makefile aby działał , co również jest wyjaśnione w @apuche’s answer below . Komentowanie opcji systemu Linux i odkomentowanie opcji systemu MacOS powinno wystarczyć.
Następnie uruchamiamy ./configure
, następnie make
.
Teraz musimy przenieść plik binarny tree
do miejsca, które znajduje się w ścieżce wykonywalnej. Na przykład:
sudo mkdir -p /usr/local/bin
sudo cp tree /usr/local/bin/tree
Teraz edytuj swój ~/.bash_profile
tak, aby zawierał:
export PATH="/usr/local/bin:$PATH"
Przeładuj powłokę, a teraz which tree
powinien wskazywać na /usr/local/bin/tree
.
Nie do końca to samo, ale jedna szybka droga na Maca to:
find .
i tyle. Będzie to lista wszystkich ścieżek dostępu do plików w bieżącym katalogu jako lista.
Albo jeśli Twój administrator nie pozwoli Ci zainstalować żadnego z narzędzi brew
, fink
, port
, zawsze możesz zbudować je ze źródła :
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
Edytuj Makefile aby skomentować część linuksa i odkomentować obszar 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
Jeśli chcesz wymusić na drzewie, aby zawsze kolorować wyjście, zawsze możesz edytować metodę main
pliku tree.c
i dodać force_color=TRUE;
przed setLocale(LC_TYPE,"");
W końcu trafisz make
i skończysz budować tree
dla maca.
Tribute idzie do Shaun Chapman za jego oryginalny post na swoim blogu.
Nie ma formalnego polecenia tree
jako takiego, ale możesz to zrobić:
Zapisz następujący skrypt w /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
Zmień uprawnienia tak, aby można było go uruchomić:
chmod 755 /usr/local/bin/tree
Oczywiście możesz być zmuszony do stworzenia /usr/local/bin
:
sudo mkdir -p /usr/local/bin/tree
Znalazłem tu proste rozwiązanie: http://murphymac.com/tree-command-for-mac/
Więc dodanie do .bashrc
, .bash_profile
lub innego miejsca sprawi, że będzie działać:
alias tree="find . -print | sed -e 's;[^/]*/;| ____;g;s;____ |; |;g'"
Teraz dodanie polecenia tree
wyświetli się tak:
# ~/my-html-app [13:03:45]$ tree
.
| ____ app.js
| ____ css
| | ____ main.css
| | ____ theme.css
| ____ index.html
Dodanie małego punktu do @apuche’s answer dla funkcji OSX El Capitan rootless . make install
nie działa, ponieważ nie możemy zapisać się do katalogu /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$
Aby to przezwyciężyć, wystarczy edytować Makefile
aby mieć prefix = /usr/local
Oto rozwiązanie skryptu Rubinowego, które tworzy ładne drzewo Unicode wraz z użytecznymi metadanymi.
#!/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
Możesz zmodyfikować linię meta = …
, aby wyodrębnić różne metadane do wyświetlenia, ręcznie wybierając kawałki podziału w następnej linii. Przy nieco większej ilości pracy możesz przekazać dowolne argumenty ls, aby wybrać metadane do wyświetlenia.
Wyjście próbne (wygląda ładniej w terminalu OS X niż czcionka na 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
Dodałem do ~/.bash_profile do wykorzystania w Terminal.app. Dodałem kilka komentarzy, które mają pomóc w zapamiętaniu sposobu użycia znaleziska.
##########
## 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'
}
przykład dla bieżącego katalogu
$> tree
przykład dla jakiejś ścieżki
$> tree /some/path
Zainstaluj Xcode
Get Command Line Tools
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
Pod koniec gry, ale miałem to samo pytanie. Z powodu ograniczeń w miejscu pracy, nie mogłem zainstalować pakietu ze źródła lub za pośrednictwem zewnętrznego menedżera pakietów.
To jest moja implementacja:
# 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'
}
Po prostu dodaj funkcję do /Users/foo/.profile
lub .bash_profile
, a następnie odśwież profil za pomocą: source .profile
lub: source .bash_profile