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

Mac OS X equivalent van het Ubuntu "boom" commando

Is er een equivalent van het Ubuntu tree commando voor Mac OS X?

Antwoorden (13)

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

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.

  • *

Met een pakketbeheerder

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.

Installeren vanaf bron

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.

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

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.

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

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

Optioneel: Dwingende kleuruitvoer

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.

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

Je zou waarschijnlijk homebrew moeten gebruiken. Als u dat doet:

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

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
6
6
6
2012-04-07 12:10:48 +0000

Een alternatief voor het gebruik van find en 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

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
3
3
3
2016-01-12 03:16:16 +0000

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.

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

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
2
2
2
2014-06-05 02:20:04 +0000

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

Het is niet zo mooi als een gnoeboom… maar het is heel makkelijk om een alias te vinden… Je kunt zelfs een beetje kleur toevoegen door de G optie op osx’s ls kleur te zetten.

alias tree='find . -type d | ls -lARG'
1
1
1
2017-02-21 08:29:03 +0000
    1. Installeer Xcode
  1. Krijg Command Line Tools

xcode-select --install
  1. Installeer Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. Installeer boom
brew install tree
0
0
0
2017-10-16 14:50:54 +0000

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