Frage Mac OS X entspricht dem Ubuntu "Baum" Befehl


Gibt es ein Äquivalent zum Ubuntu? tree Befehl für Mac OS X?


265
2017-11-21 10:38


Ursprung




Antworten:


Ja, da ist, und es heißt tree.

Sie können es installieren

  • von der Quelle oder
  • mit einem Paketmanager

Ersteres mag etwas kompliziert erscheinen, wenn Sie noch nie einen Quellcode kompiliert haben. Es erfordert die Bearbeitung einiger Dateien. Letzteres hat ein wenig Overhead (weil Sie keinen Paketmanager für nur ein Tool benötigen), aber es ist im Allgemeinen viel einfacher zu installieren tree und andere Softwarepakete.


Installation von der Quelle

Zuerst müssen Sie die Xcode-Befehlszeilenwerkzeuge installieren, indem Sie sie ausführen xcode-select --install.

Dann, Laden Sie die tree Quelle. Dann Ändere das Makefile, um es zum Laufen zu bringen, die auch in erklärt wird @ apuches Antwort unten. Das Auskommentieren der Linux-Optionen und das Auskommentieren der OS X-Optionen sollte ausreichen.

Dann renne ./configure, dann make.

Jetzt musst du das verschieben tree Binärdatei an einen Speicherort, der sich in Ihrem ausführbaren Pfad befindet. Beispielsweise:

sudo mkdir -p /usr/local/bin
sudo cp tree /usr/local/bin/tree

Bearbeiten Sie jetzt Ihre ~/.bash_profile einschließen:

export PATH="/usr/local/bin:$PATH"

Lade die Shell neu und jetzt which tree sollte auf zeigen /usr/local/bin/tree.


Mit einem Paketmanager

Es gibt mehrere Paketmanager für OS X. Die beliebtesten sind: Homebrew, MacPorts, oder Fink (sortiert in der Reihenfolge, die ich empfehlen würde). Installieren Sie eines der beiden zuerst - einfach installieren ein, nicht alle.

Führen Sie dann einen der folgenden Befehle aus, je nachdem, welchen Paketmanager Sie ausgewählt haben.

Für Homebrew:

brew install tree

Für MacPorts:

sudo port install tree

Für Fink:

fink install tree

Die Paketmanager bieten andere Befehlszeilenprogramme an, einschließlich der GNU / Linux-Programme, die standardmäßig nicht mit OS X ausgeliefert werden.


371
2017-11-21 10:52



@slhck: Danke! Installieren Homebrew + brew install tree Lief wie am Schnürchen :) - Misha Moroshko
@DavidMoles Weil einfach läuft make unter OS X funktioniert nicht. Zuerst müssen Sie wissen, wie Sie die Xcode-Befehlszeilen-Tools installieren (oder generell eine Idee zum Erstellen von Software haben), und dann werden Sie feststellen, dass ein nicht definiertes Symbol ausfällt. Sie müssen also einige Änderungen am Makefile vornehmen (wie beschrieben) Hier). Zu viel Ärger IMO. - slhck
@ 7stud Viele Leute kennen ein paar Befehlszeilen-Tools für sehr einfache CLI-Aufgaben, und sie können nicht wissen, wie man Software kompiliert. Die Leute haben manchmal Mühe, was zu verstehen ./configure und make genau tun und warum diese überhaupt benötigt werden. Oder sie wollen nicht damit umgehen. Oder lesen Sie irgendwelche Hilfedateien, für diese Angelegenheit. Sie würden lieber etwas tun apt-get install. Es ist in Ordnung, wenn Sie Installationen aus der Quelle bevorzugen (und ich auch persönlich), aber Sie müssen akzeptieren, dass es Lösungen gibt, die von anderen oder vielleicht sogar den meisten normalen Computernutzern leichter wahrgenommen werden. - slhck
Die Leute haben manchmal Mühe zu verstehen, was ./configure und genau machen und warum diese überhaupt benötigt werden  Ich habe Software seit 15 Jahren aus der Quelle installiert, und ich habe keine Ahnung was ./configure und make machen. Ich weiß nur, dass es sich um Schritte handelt, die ich ausführen muss, um Software zu installieren. Ich lese blind die README und INSTALL-Dateien, und ich mache was auch immer es sagt. - 7stud
@DhruvGhulati Nicht, dass ich weiß, aber Sie könnten umgekehrtgrep es. Mögen tree | grep -v 'json' o.ä. - slhck


Nicht genau das Gleiche, aber ein schneller Weg auf dem Mac ist:

find .

und das ist es. Es listet alle Dateipfade im aktuellen Verzeichnis als Liste auf.


25
2018-05-02 13:31



Bei Interesse an einem bestimmten Verzeichnis: find ./ <dir_name> - raspacorp
Wenn nur an Dateien interessiert, find . -type f - Jared Beck
Ich wollte nur ein paar Ebenen tief gehen, um die Verzeichnisstruktur so zu zeigen find . -type d -maxdepth 2 hat für mich gearbeitet - Matthew Lock
Besser nutzen find * wenn Sie keine versteckten Dateien und Verzeichnisse sehen wollen. tree Versteckte Dateien und Verzeichnisse werden standardmäßig nicht angezeigt. - asmaier


Es gibt kein formelles tree Befehl per se aber Sie können dies tun:

Speichern Sie das folgende Skript 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

Ändern Sie die Berechtigungen, damit Sie sie ausführen können:

chmod 755 /usr/local/bin/tree 

Natürlich müssen Sie möglicherweise erstellen /usr/local/bin:

sudo mkdir -p /usr/local/bin/tree 

18
2017-11-21 10:53



Es verfehlt alle Möglichkeiten von tree, aber immer noch eine nette kleine Lösung. - slhck
@slhck hehe es war eine schnelle Hack-Lösung ... - Ahmed Masud
Vielleicht möchten Sie aber Ihre Variablen zitieren. - slhck
@JenS. Natürlich können Sie einfach den Suchbefehl ändern, um damit umzugehen - Ahmed Masud
Genie - liebe es. - xaphod


Sie sollten wahrscheinlich verwenden Homebrew. Wenn Sie tun:

brew install tree

18
2018-06-30 16:30



Ich wollte gerade antworten. Gute Show. - alfonso
Einfacher aber kraftvoller Vorschlag. Vielen Dank. - Gearon


Oder wenn Ihr Administrator Sie nicht installieren lässt brew, fink, port Werkzeuge können Sie immer aus der Quelle bauen:

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

Bearbeiten Sie das Makefile, um den Linux-Teil zu kommentieren und den OSX-Bereich auskommentieren:

# 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

Optional: Erzwingt die Farbausgabe

Und wenn Sie schon dabei sind, wenn Sie den Baum zwingen wollen, die Ausgabe immer zu kolorieren, können Sie immer die main Methode der tree.c Datei und fügen hinzu force_color=TRUE; Vor setLocale(LC_TYPE,"");

Endlich getroffen make und du bist fertig mit dem Bauen tree für Mac.

Tribut geht an Shaun Chapman für seinen ursprünglichen Beitrag in seinem Blog.


16
2017-07-14 23:09



Konnte nicht zu Shauns Website gelangen; Danke für die Aufmerksamkeit beim Ändern des Makefiles. - Paul Nathan
Insbesondere können Sie hinzufügen force_color = TRUE;. Kein Semikolon und Sie erhalten einen Kompilierungsfehler. - tgrosinger
Ich habe gerade Version 1.7 gebaut und statt setLocale es ist setlocale. Also rein tree.c, Du suchst nach setlocale(LC_TYPE,""); und danke! - Avi Cohen
Gute Antwort. Können Sie eine Notiz hinzufügen, wie Sie sie verschieben können? /bin (oder einen Pfad, so dass es global verwendet werden kann)? - Khanh Nguyen
FYI, kompilieren 1.7.0 unter Yosemite Ich habe: warning: format specifies type 'long' but the argument has type 'long long'. Die Lösung bestand darin, einen Formatbezeichner zu ändern %9ldzu %9lld. - David Moles


Eine Alternative mit find und awk:

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

5
2018-04-07 12:10





Hinzufügen eines kleinen Punktes zu @ apuches Antwort für OSX El Capitan wurzellos Feature. make install scheitert, da wir nicht schreiben dürfen /usr/bin Verzeichnis.

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$

Um dies zu überwinden, einfach bearbeiten Makefile haben prefix = /usr/local


3
2018-01-12 03:16



Nun, das funktioniert technisch. Aber es ist invasiv. Du könntest also wahrscheinlich rennen ./configure --prefix=/usr/local vor dem Laufen make und make install und es würde die gleichen Ergebnisse erzielen. - JakeGould
@JakeGould Absolut, ich benutze es prefix in solchen Szenarien. Aber es gibt keinen configure Datei in der neuesten Version von Baum (1.7.0) jetzt. Das INSTALL Datei im entpackten Verzeichnis sagt nur zu verwenden make und make install sofort. - vikas027