Je me demande si nous pouvons combiner l'honnêteté de «du» avec la mise en forme en retrait de «arbre». Si je veux une liste des tailles d'annuaires:
du -hx -d2
... affiche deux niveaux de profondeur et tous les résumés de taille sont honnêtes, mais il n'y a pas de retrait des sous-répertoires. D'autre part:
tree --du -shaC -L 2
... indentation et colorise bien mais les tailles rapportées sont un mensonge. Pour obtenir les vraies tailles, il faut:
tree --du -shaC
... c'est-à-dire que vous n'obtenez les vraies tailles que si vous laissez «arborescence» vous montrer la structure complète du répertoire. J'aimerais pouvoir toujours avoir des résumés de taille correcte quel que soit le nombre de niveaux de sous-répertoires que je souhaite réellement afficher. Je fais souvent ceci:
tree -du -shaC | grep "\[01;34m"
... qui supprime tout sauf les répertoires, et les met bien en retrait ... mais il n'y a pas de moyen facile de limiter l'affichage à un niveau de nombre donné (sans que les résumés ne mentent). Y a-t-il un moyen? J'ai peut-être manqué les bons commutateurs ...
la source
Vous n'avez pas besoin de chercher le code couleur, l'
-d
option estlist directories only
.Cela semble faire ce que vous voulez:
La
grep
commande supprime toutes les lignes qui ont (un ou plusieurs espaces suivis d'un non-espace suivi d'un espace) deux fois, suivi de a[
.Si vous voulez une profondeur de 1, remplacez le nombre de bornes à l'intérieur des accolades {} par
{1}
plutôt que{2}
. même si vous voulez une profondeur de 3, changez-la en{3}
.Vous pouvez transformer cela en une fonction shell, comme ceci:
Cela permet
getopts
de "voler" n'importe quelle-L
option et son argument depuis latree
ligne de commande, s'il y en a une. S'il n'y a pas d'-L n
option sur la ligne de commande, cela fonctionne aussi.Toutes les autres options et arguments sont passés à la
tree
commande.La
local PATTERN=...
ligne n'est pas vraiment nécessaire. Je l'ai seulement fait comme ça pour m'assurer qu'il tiendrait sur une seule ligne et non pas sur un motU&L
. L'expression régulière pourrait et devrait probablement aller directement sur latree | grep ...
ligne.Exécutez-le comme ceci:
ou
la source
-L
que c'était un problème, pas du tout mentionné-d
. Maintenant que j'examine de plus près les chiffres rapportés,tree --du
nitree --du -d
rapporter des tailles qui ressemblent en aucune façon à celles rapportées pardu
.tree --du
ne semble de toute façon pas donner les tailles correctes pour les répertoires, avec ou sans-d
ou-L
. Je n'ai aucune idée de ce que les chiffres sont censés être, mais ils ne sont pas liés à quelsdu
rapports.Vous pouvez utiliser dutree
la source
Il n'y a pas d'outil de commande parfait pour le faire, mais j'ai trouvé deux façons proches.
affiche la taille des dossiers et des fichiers, mais ne s'affiche pas en mode arborescence.
du -ah --max-depth=1 /var/log
s'affiche en arborescence mais uniquement la taille des fichiers, les dossiers sont en nombre
tree -ah /var/log -L 1
la source
Inspiré par cas, je fais maintenant ceci:
la source
"$@"
immédiatement après le-shaC
. sinon, cette fonction est codée en dur pour fonctionner uniquement pour le répertoire en cours.getopts
est que les options peuvent apparaître dans n'importe quel ordre sur la ligne de commande. La version initiale de lamytree
fonction que j'ai écrite utilisait "$ 1" comme la vôtre, donc l'argument depth devait être le premier argument, et ce n'était pas optionnel. J'ai décidé que ce n'était pas assez bon, j'ai donc utilisé le bash-builtingetopts
pour traiter l'-L
option. Cela a permis à l'-L n
option d'apparaître n'importe où sur la ligne de commande. Cela lui a également permis d'être complètement facultatif.getopts
vous permettre d'écrire des scripts qui prennent de vraies options et arguments (plutôt que de simples arguments dans des positions codées en dur comme $ 1 $ 2 $ 3, etc.), tout comme la plupart des autres programmes de votre système. Et si vous utilisez legetopt
programme (notez qu'il n'y a pas des
) duutil-linux
paquet, vous pouvez utiliser à la fois des options courtes à une seule lettre (par exemple-l
) et des options longues (comme--long
), tout comme les programmes GNU.