Bonjour
Philosophie Unix: Chaque commande ne fait qu'une seule chose mais le fait bien (et sous-entendu toujours de la même façon). En revanche, tu as tout un tas de commandes diverses qui te permettent de traiter les flux d'informations au travers de celles ci dans des chainages pipés pour arriver au résultat final.
A priori, dans ton cas, moi je passerais par un awk pour lui demander d'inverser l'affichage des lignes issues du find.
find $dir -maxdepth 1 -type d -exec du -sh {} \; |awk '{printf("%s\t%s\n", $2, $1)}'
Ceci dit, comme il n'y a que deux champs, on peut peut-être passer par sed. Moins gourmand que awk mais aussi moins évident à comprendre d'emblée...
find $dir -maxdepth 1 -type d -exec du -sh {} \; |sed -e "s/\(.\{1,\}\)\t\(.\{1,\}\)/\2\t\1/"
Explication de cette instructon barbare: je demande à récupérer tout caractère (.) répété 1 à plusieurs fois ({1,}) suivi d'une tabulation (\t) dans une zone qui sera mémorisé comme n° 1 (le premier jeu de parenthèses). Pareil pour les caractères qui suivent la tabulation sauf que la zone mémoire sera alors cette fois la n° 2 (le second jeu de parenthèses). Et je demande alors à remplacer ce couple par (/) un nouveau couple formé par ce qui se trouve en mémoire n°2 (\2) suivi d'une tabulation (\t) puis par ce qui se trouve en mémoire n° 1 (\1). Et tout ceci protégés par des backslashes pour éviter que ce soit le shell qui intercepte les caractères spécifiques de mémorisation/répétition (parenthèses, accolades) et qu'ils soient bien transmis à sed...
Partager