combiner le meilleur du 'du' et 'l'tree'

Je me request si nous pouvons combiner l'honnêteté du «du» avec la mise en forme indentée de «l'tree». Si je veux une list des tailles de directorys:

du -hx -d2 

… affiche deux niveaux en profondeur et tous les résumés de taille sont honnêtes, mais il n'y a pas d'indentation des sous-dossiers. D'autre part:

 tree --du -shaC -L 2 

… indents et colorizes joliment mais les tailles rapscopes sont un mensonge. Pour get les vraies tailles on doit:

 tree --du -shaC 

… ce qui veut dire que vous n'obtenez que les vraies tailles si vous laissez 'tree' vous montrer la structure entière du directory. Je voudrais pouvoir toujours avoir des résumés de taille corrects, quel que soit le nombre de sous-dossiers que je veux afficher. Je fais souvent ceci:

 tree -du -shaC | grep "\[01;34m" 

… qui découpe tout sauf les directorys, et les indentifie bien … mais il n'y a pas de moyen facile de limiter l'affichage à un nombre donné de niveaux (sans les sommaires). Y a-t-il un moyen? Peut-être que j'ai manqué les bons commutateurs …

Consultez aussi ncdu : http://dev.yorhel.nl/ncdu

Sa page list également d'autres "projets similaires":

gt5 – Assez similaire à ndudu, mais une approche différente.

tdu – Un autre petit utilitaire de visualisation de l'utilisation des disques basé sur ncurses.

TreeSize – GTK, en utilisant un treeview.

Baobab – GTK, en utilisant des diagrammes à secteurs, un treeview et un treemap. Livré avec GNOME.

GdMap – GTK, avec un affichage de treemap.

Filelight – KDE, utilisant des camemberts.

KDirStat – KDE, avec un affichage de treemap.

QDiskUsage – Qt, utilisant des diagrammes à secteurs.

xdiskusage – FLTK, avec un affichage de treemap.

fsv – visualisation 3D.

Philesight – Clone Web de Filelight.

Vous n'avez pas besoin de grep pour le code de couleur, l'option -d n'est list directories only .

Cela semble faire ce que vous voulez:

 $ tree --du -d -shaC | grep -Ev '( *[^ ]* ){2}\[' . ├── [ 18] dir1 ├── [ 30] dir2 ├── [ 205] junk │  ├── [ 18] dir1 │  ├── [ 30] dir2 │  └── [ 76] dir3 ├── [ 119] merge └── [ 20] stuff 4.4K used in 10 directories 

La command grep supprime toutes les lignes qui ont (un ou plusieurs espaces suivis d'un espace non suivi d'un espace) deux fois, suivies d'un [ .

Si vous voulez une profondeur de 1, changez le nombre lié à l'intérieur des accolades {} en {1} plutôt que {2} . même si vous voulez une profondeur de 3, changez-la en {3} .

Vous pouvez le transformer en une fonction shell, comme ceci:

 mytreedu() { local depth='' while getopts "L:" opt ; do case "$opt" in L) depth="$OPTARG" ;; esac done shift "$((OPTIND-1))" if [ -z "$depth" ] ; then tree --du -d -shaC "$@" else local PATTERN='( *[^ ]* ){'"$depth"'}\[' tree --du -d -shaC "$@" | grep -Ev "$PATTERN" fi } 

Cela utilise getopts pour "voler" n'importe quelle option -L et son argument à partir de la command line de l' tree , s'il y en a un. S'il n'y a pas d'option -L n sur la command line, cela fonctionne aussi.

Toutes les autres options et arguments sont transmis à la command tree .

La ligne local PATTERN=... n'est pas vraiment nécessaire. Je l'ai seulement fait comme ça pour m'assurer que ça irait sur une ligne et non pas sur Word-wrap ici sur U&L L'expression régulière pourrait et devrait probablement aller directement sur l' tree | grep ... tree | grep ... ligne.

Exécutez comme ceci:

 mytreedu 

ou

 mytreedu -L 2 /path/to/dir/ 

Inspiré par cas, je suis en train de faire ceci:

 treee () { integer levels=$(( ($1 + 1) * 4 )) tree --du -shaC | grep "\[01;34m" | grep -Ev "^[^\[]{$levels}\[*" du -sh . }