Mac OS X equivalent van het Ubuntu "boom" commando
Is er een equivalent van het Ubuntu tree
commando voor Mac OS X?
Is er een equivalent van het Ubuntu tree
commando voor Mac OS X?
U kunt het tree
commando ook op macOS krijgen. Als u Homebrew hebt, hoeft u alleen maar te draaien:
brew install tree
Lees verder voor meer informatie.
Er zijn verschillende pakketbeheerders voor macOS. De meest populaire zijn: Homebrew , MacPorts , of Fink . U kunt beide installeren, maar ik raad Homebrew aan. Installeer niet meer dan één van deze opdrachten tegelijkertijd!
Volg de instructies op de website en voer vervolgens één van de volgende opdrachten uit, afhankelijk van welke pakketbeheerder u hebt gekozen.
Voor Homebrew:
brew install tree
Voor MacPorts:
sudo port install tree
Voor Fink:
fink install tree
De pakketbeheerders bieden andere commandoregelprogramma’s aan, inclusief de GNU/Linux programma’s die niet standaard met macOS worden geleverd.
Eerst moet u de Xcode commandoregelgereedschappen installeren door xcode-select --install
uit te voeren.
Vervolgens download de tree
bron . Vervolgens wijzig je de Makefile om het te laten werken , wat ook wordt uitgelegd in @apuche’s antwoord hieronder . De Linux-opties becommentariëren en de macOS-opties niet becommentariëren zou voldoende moeten zijn.
Dan, voer ./configure
uit, dan make
.
Nu moet u het binaire bestand tree
verplaatsen naar een locatie die zich in uw uitvoerbare pad bevindt. Bijvoorbeeld:
sudo mkdir -p /usr/local/bin
sudo cp tree /usr/local/bin/tree
Bewerk nu je ~/.bash_profile
met:
export PATH="/usr/local/bin:$PATH"
Herlaad de shell, en nu moet which tree
naar /usr/local/bin/tree
wijzen.
Niet precies hetzelfde, maar een snelle manier op de Mac is:
find .
en dat is het. Het zal alle bestandspaden in de huidige directory als een lijst weergeven.
Of als uw beheerder u geen van de brew
, fink
, port
tools laat installeren, kunt u het altijd vanuit de broncode bouwen:
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
Bewerk de Makefile om commentaar te geven op het linux gedeelte en het osx gedeelte:
# 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
En terwijl je bezig bent, als je de boom wilt dwingen om altijd de uitvoer te kleuren, kun je altijd de main
-methode van het tree.c
-bestand bewerken en force_color=TRUE;
toevoegen voor setLocale(LC_TYPE,"");
. Klik ten slotte op make
en je bent klaar met het bouwen van tree
voor mac.
Tribute gaat naar Shaun Chapman voor zijn originele bericht op zijn blog.
Er is geen formele tree
opdracht op zich, maar je kunt dit wel doen:
Sla het volgende script op in /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
Wijzig de rechten zodat je het kunt uitvoeren:
chmod 755 /usr/local/bin/tree
Natuurlijk moet je misschien /usr/local/bin
maken:
sudo mkdir -p /usr/local/bin/tree
``` &001
Ik heb hier een eenvoudige oplossing gevonden: http://murphymac.com/tree-command-for-mac/
Dus het toevoegen van het volgende aan uw .bashrc
, .bash_profile
of een andere plaats zorgt ervoor dat het werkt:
alias tree="find . -print | sed -e 's;[^/]*/;| ____;g;s;____ |; |;g'"
Nu zal het toevoegen van een tree
commando als volgt worden afgedrukt:
# ~/my-html-app [13:03:45]$ tree
.
| ____ app.js
| ____ css
| | ____ main.css
| | ____ theme.css
| ____ index.html
Een klein puntje toevoegen aan @apuche’s antwoord voor OSX El Capitan rootless functie. make install
mislukt omdat we niet in /usr/bin
directory mogen schrijven.
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$
Om dit te verhelpen, hoeft u alleen maar Makefile
te bewerken om prefix = /usr/local
te hebben.
Hier is een Ruby script oplossing die een mooie Unicode boom produceert samen met nuttige metadata.
#!/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
Je zou de meta = …
regel kunnen aanpassen om verschillende metadata weer te geven, waarbij je de gesplitste stukken op de volgende regel met de hand uitpikt. Met iets meer werk zou je willekeurige ls argumenten kunnen doorgeven om de weer te geven metadata te selecteren.
Sample uitvoer (ziet er mooier uit in de OS X terminal dan het lettertype op 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
Ik heb het volgende toegevoegd aan ~/.bash_profiel voor gebruik in Terminal.app. Enkele opmerkingen zijn opgenomen om te helpen herinneren hoe vinden wordt gebruikt.
##########
## 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'
}
voorbeeld voor de huidige directory
$> tree
voorbeeld voor sommige path
$> tree /some/path
Krijg Command Line Tools
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
Laat in het spel, maar ik had dezelfde vraag. Vanwege beperkingen op de werkplek kon ik geen pakket installeren vanaf de bron of via een pakketbeheerder van een derde partij.
Dit is mijn implementatie:
# 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'
}
Voeg gewoon de functie toe aan /Users/foo/.profile
of .bash_profile
en vernieuw het profiel met: source .profile
of: source .bash_profile