Existe-t-il un équivalent de la tree
commande Ubuntu pour Mac OS X?
Existe-t-il un équivalent de la tree
commande Ubuntu pour Mac OS X?
Réponses:
Vous pouvez également obtenir la tree
commande sur macOS. Si vous avez Homebrew , tout ce que vous avez à faire est de lancer:
brew install tree
Lisez la suite pour plus de détails.
Il existe plusieurs gestionnaires de paquets pour macOS. Les plus populaires sont: Homebrew , MacPorts ou Fink . Vous pouvez installer l'un ou l'autre, mais je recommande Homebrew. N'installez pas plus d'un d'entre eux en même temps!
Suivez les instructions du site Web, puis exécutez l’une des commandes suivantes, en fonction du gestionnaire de packages que vous avez choisi.
Pour Homebrew:
brew install tree
Pour MacPorts:
sudo port install tree
Pour Fink:
fink install tree
Les gestionnaires de paquets offrent d'autres programmes en ligne de commande, y compris ceux GNU / Linux qui ne sont pas fournis avec macOS par défaut.
Tout d'abord, vous devez installer les outils de ligne de commande Xcode en exécutant xcode-select --install
.
Ensuite, téléchargez le tree
source . Puis changez le Makefile pour le faire fonctionner , ce qui est également expliqué dans la réponse de @ apuche ci-dessous . Commenter les options Linux et les commenter macOS devrait suffire.
Alors, cours ./configure
, alors make
.
Maintenant, vous devez déplacer le tree
fichier binaire vers un emplacement situé dans votre chemin d’exécutable. Par exemple:
sudo mkdir -p /usr/local/bin
sudo cp tree /usr/local/bin/tree
Maintenant, éditez votre ~/.bash_profile
pour inclure:
export PATH="/usr/local/bin:$PATH"
Rechargez le shell, et which tree
devrait maintenant pointer vers /usr/local/bin/tree
.
make
OS X ne fonctionne pas. Tout d'abord, vous devez savoir comment installer les outils de ligne de commande Xcode (ou en général, avoir une idée de la construction de logiciels), puis vous découvrirez qu'il génère une erreur sur un symbole non défini. Vous devez donc faire quelques ajustements dans le makefile (comme expliqué ici ). Trop de tracas à l’OMI.
./configure
et make
ce qu’ils font exactement et pourquoi. Ou ils ne veulent pas y faire face. Ou lisez tous les fichiers d'aide, d'ailleurs. Ils préfèrent faire quelque chose comme apt-get install
. C'est bien si vous préférez les installations à partir des sources (et moi aussi personnellement), mais vous devez accepter le fait qu'il existe des solutions qui sont perçues plus facilement par les autres, voire même par la majorité des utilisateurs normaux.
./configure
et make
faire. Je sais simplement que ce sont des étapes à suivre pour installer un logiciel. Je lis aveuglément les fichiers README et INSTALL, et je fais ce qu’il dit.
grep
. Comme tree | grep -v 'json'
ou similaire.
Ce n'est pas exactement pareil, mais un moyen rapide sur Mac est:
find .
et c'est tout. Il listera tous les chemins de fichiers du répertoire en cours.
find . -type f
find . -type d -maxdepth 2
fonctionnait si bien pour moi
find *
si vous ne voulez pas voir les fichiers et répertoires cachés. tree
ne montre pas les fichiers cachés et les répertoires par défaut.
find
est un 万金油 outil.
Ou si votre administrateur ne vous laissera pas installer l' un des brew
, fink
, des port
outils que vous pouvez toujours construire de la source:
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
Editez le Makefile pour commenter la partie linux et décommenter la zone 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
Et pendant que vous y êtes, si vous voulez forcer tree à toujours coloriser la sortie, vous pouvez toujours éditer la main
méthode du tree.c
fichier et ajouter force_color=TRUE;
avant.setLocale(LC_TYPE,"");
Enfin cliquez sur make
et vous avez terminé la construction tree
pour mac.
Hommage rend hommage à Shaun Chapman pour son article original sur son blog.
force_color = TRUE;
. Pas de point-virgule et vous obtenez une erreur de compilation.
setLocale
son setlocale
. Alors à l'intérieur tree.c
, vous recherchez setlocale(LC_TYPE,"")
; et merci!
/bin
(ou un chemin d'accès afin qu'il puisse être utilisé globalement)?
warning: format specifies type 'long' but the argument has type 'long long'
. Le correctif consistait à changer un spécificateur de format de %9ld
en %9lld
.
Il n'y a pas de tree
commande formelle en tant que telle, mais vous pouvez le faire:
Enregistrez le script suivant dans / 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
Modifiez les autorisations afin que vous puissiez l'exécuter:
chmod 755 /usr/local/bin/tree
Bien sûr, vous devrez peut-être créer /usr/local/bin
:
sudo mkdir -p /usr/local/bin/tree
tree
, mais reste une belle petite solution.
J'ai trouvé une solution simple ici: http://murphymac.com/tree-command-for-mac/
Ainsi , en ajoutant ce qui suit à votre .bashrc
, .bash_profile
ou tout autre lieu fera fonctionner:
alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
Maintenant, ajouter une tree
commande imprimera comme ceci:
# ~/my-html-app [13:03:45]$ tree
.
|____app.js
|____css
| |____main.css
| |____theme.css
|____index.html
Ajout d'un petit point à la réponse de @ apuche pour la fonctionnalité sans racine OSX El Capitan . make install
échoue car nous ne sommes pas autorisés à écrire dans le /usr/bin
répertoire.
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$
Pour surmonter cela, il suffit de modifier Makefile
pour avoirprefix = /usr/local
./configure --prefix=/usr/local
avant d' exécuter make
et make install
il permettrait d' atteindre les mêmes résultats.
J'ai ajouté ce qui suit à ~ / .bash_profile pour une utilisation dans Terminal.app. Certains commentaires sont inclus pour vous aider à vous rappeler comment trouver est utilisé.
##########
## 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'
}
exemple pour le répertoire en cours
$> tree
exemple pour un chemin
$> tree /some/path
Voici une solution de script Ruby qui produit un bel arbre Unicode avec des métadonnées utiles.
#!/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
Vous pouvez modifier la meta = …
ligne pour extraire différentes métadonnées à afficher, en sélectionnant à la main les éléments fractionnés sur la ligne suivante. Avec un peu plus de travail, vous pourriez passer des arguments ls arbitraires pour sélectionner les métadonnées à afficher.
Exemple de sortie (plus beau dans le terminal OS X que la police sur 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
Installer Xcode
Obtenir des outils de ligne de commande
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
Tard au jeu, mais j'avais la même question. En raison de restrictions sur le lieu de travail, je ne pouvais pas installer un package à partir des sources ni via un gestionnaire de package tiers.
Ceci est ma mise en œuvre:
# 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'
}
Ajoutez simplement la fonction à /Users/foo/.profile
ou .bash_profile
, puis actualisez le profil avec: source .profile
ousource .bash_profile