Existe-t-il un équivalent de l'application Ubuntu tree
commande pour Mac OS X ?
Superbe petite ligne simple, mais elle ne fonctionne que pour le répertoire courant.
Existe-t-il un équivalent de l'application Ubuntu tree
commande pour Mac OS X ?
J'ai trouvé une solution simple ici : http://murphymac.com/tree-command-for-mac/
Donc, en ajoutant ce qui suit à votre .bashrc
, .bash_profile
ou tout autre endroit le fera fonctionner :
alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
Maintenant, ajouter un tree
s'imprimera comme ceci :
# ~/my-html-app [13:03:45]$ tree
.
|____app.js
|____css
| |____main.css
| |____theme.css
|____index.html
Parfois, j'aimerais dessiner un arbre d'un autre répertoire. Par exemple, je suis dans mon répertoire personnel et je veux voir ce qu'il y a dans, disons.., /tmp
. Comprenez que j'aime l'élégance de cette phrase et que j'ai voté votre réponse, mais je voulais juste souligner que cela ne remplace pas complètement la "vraie" réponse. tree
au cas où quelqu'un le chercherait.
Cela aligne le tuyau du sous-répertoire avec la première lettre du répertoire parent, ce que je préfère de loin à la commande SED répétée dans de multiples réponses, qui indente simplement le sous-répertoire de deux espaces, mais donne quatre soulignements avant le répertoire parent. Je préfère également les tirets.
Voici une solution Ruby script qui produit un bel arbre Unicode accompagné de 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 pourriez modifier le meta = …
pour extraire différentes métadonnées à afficher, en sélectionnant à la main les éléments divisé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 (la police est plus belle dans le terminal OS X que 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
Ajout d'un petit point à La réponse de @apuche pour OSX El Capitan sans racines fonction. make install
échoue puisque nous ne sommes pas autorisés à écrire dans /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
d'avoir prefix = /usr/local
Eh bien, ça marche techniquement. Mais c'est invasif. Donc vous pourriez probablement exécuter ./configure --prefix=/usr/local
avant d'exécuter make
y make install
et cela donnerait les mêmes résultats.
@JakeGould Absolutely, I do use prefix
dans de tels scénarios. Mais il n'y a pas configure
dans la dernière version de arbre (1.7.0) maintenant. Le site INSTALL
dans le répertoire dézippé dit simplement d'utiliser make
y make install
tout de suite.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.