Comment trier numériquement des tailles lisibles par l'homme?


20

par exemple, j'ai une commande qui montre combien de dossier d'espace prend

du folder | sort -n

cela fonctionne très bien, mais j'aimerais avoir une forme lisible par l'homme

du -h folder

cependant, si je le fais, je ne peux pas le trier sous forme numérique.

Comment joindre du folderet du -h foldervoir la sortie triée en tant que du folder, mais avec la première colonne dedu -h folder

PS ce n'est qu'un exemple. cette technique pourrait être très utile pour moi (si c'est possible)

Réponses:


11

Voici une approche plus générale. Obtenez la sortie de du folderet du -h folderdans deux fichiers différents.

du folder > file1
du -h folder > file2

L'élément clé est le suivant: concaténer file1et file2ligne par ligne, avec un délimiteur approprié.

paste -d '#' file1 file2 > file3

(en supposant qu'il #n'apparaît pas dans file1et file2)

Maintenant, triez file3. Notez que cela triera en fonction du file1contenu et rompra les liens par file2contenu. Extraire le résultat pertinent en utilisant cut:

sort -n -k1,7 file3 | cut -d '#' -f 2

Jetez également un œil à man sortd'autres options.


Vous pouvez également l'enregistrer en tant qu'alias, pour une réutilisation ultérieure. Pour ce faire, ajoutez ce qui suit au bas de ~/.bashrc:

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

Ensuite, ouvrez une nouvelle session de terminal et exécutez votre nouvel alias:

sorted-du /home

J'ai ajouté la dernière partie sur la façon de transformer votre solution en alias.
— SirCharlo

1
Utiliser des fichiers réels dans un alias (puis appeler rm dessus) est une très mauvaise idée ! Pensez à ce qui se passerait si j'avais un fichier nommé file3dans mon répertoire, il serait écrasé puis supprimé! @SirCharlo Je supprime la définition d'alias de cette réponse et la remplace par quelque chose de plus sûr.
— jmiserez

Eh bien, askubuntu.com/a/80248/22308 faites simplement cela avecsort -h
— Nam G VU

36

Essayez quelque chose comme:

du -h folder | sort -h

Alternatives: -npour le tri numérique

Remarque: l' -hoption de tri n'existe que dans les versions plus récentes d'Ubuntu.


3
il y a dans la version 8.17, donc je suppose que c'est le moyen le plus simple
— steabert

1
Merci à steabert d'avoir souligné que la commande sort a été améliorée de sort --version = 8.17 C'est la meilleure réponse pour les nouvelles versions d'Ubuntu.
— Kat Amsterdam

Ce devrait être la cause acceptée car c'est un coup franc qui résout l'OP avecsort -h
— Nam G VU

4

Cette réponse est valable pour 10.04.4LTS et les versions inférieures d'Ubuntu.

Malheureusement, la réponse précise qui trie KMG est difficile et complexe:

Vous pouvez alias l'intégralité de la commande du avec une qui trie lisible par l'homme en utilisant ce

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

que j'ai trouvé ici

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

il suffit de cd dans le dossier que vous souhaitez connaître, puis duf

vous pouvez ajouter cet alias duf à la fin de votre /home/user/.profile pour rendre la commande duf semi-permanente

résultats:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

Voici pourquoi du -sch /var/* | sort -nne fonctionne pas voir le tri de MKKMMKKMMK

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

J'ai signalé cela aux développeurs de gnu-core avec une demande de fonctionnalité pour améliorer la fonction du -h avec une fonction de tri. via bugs-coreutils@gnu.org
— Kat Amsterdam

+1, one-liner similaire:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
— steabert

Je viens d'essayer votre 1 doublure sur un système en direct. Obtenez une erreur d'accès refusé et aucun résultat. Avez-vous essayé cette commande sur un système Ubuntu en premier? J'ai changé de dossier en / home / username
— Kat Amsterdam

oh, désolé, vous devriez laisser tomber le -d '', c'est un reste de l'utiliser sur la sortie de la commande file.
— steabert

Cela semble très bien fonctionner sur les systèmes non Linux qui ne prennent pas en charge GNU sort.
— Stefan Lasiewski

2

La commande GNU sorta l'option suivante:

-h, --human-numeric-sort comparer des nombres lisibles par l'homme (par exemple, 2K 1G).

Pour avoir cette option sur BSD / OSX, vous pouvez installer sortdepuis coreutils(via brew) et ajouter le dossier bin à votre PATHdans vos fichiers rc .

La commande ressemble donc à:

du -ah . | sort -rh | head -20

0

Pour les versions récentes d'Ubuntu, utilisez du -h directory | sort -h.

J'utilise une forme de ceci tout le temps pour trouver des fichiers hors de contrôle.


Duplicata des réponses 17 nov. 11 à 17:13 Allu2
— Elder Geek

0

Ouvrez votre terminal avec Ctrl+ Alt+ tet tapez:

  du -sk * | sort -rn 

: DI est maintenant habitué à changer le Ctrl + Alt + t au format ci-dessus à tel point que j'ai collé le format requis sur mon Xpad. : D se sent bien d'être félicité pour un travail aussi
— subalterne

Chaque travail que vous avez fait ici mérite d'être complété.
— rɑːdʒɑ

0

Celui-ci gère les noms de fichiers avec des espaces ou des apostrophes, et fonctionne sur des systèmes qui ne prennent pas en charge xargs -dou sort -h:

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

ce qui se traduit par:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

Quel est l'intérêt de remplacer \npar \0? N'est-ce pas un peu trop tard pour ça?
— muru

il prépare l'entrée xargs -0, qui s'attend à ce que l'entrée soit délimitée NUL (comme le produirait find -print0). Sinon, vous ne pouvez pas utiliser -0, et les apostrophes ont une signification particulière.
— Mark Crossfield

Je sais -0, mais ce n'est pas pertinent: imgur.com/87w3vfj
— muru

Je pense que cela fonctionne car vous avez utilisé un backtick, pas une apostrophe. gist.github.com/mrmanc/8aef830945ce03aa65f0
— Mark Crossfield

0

Celui que j'ai trouvé fonctionnant sur tous les systèmes quelle que soit la version ( sort -hne fonctionne pas pour moi) est

du -h $(du * | sort -n | awk '{print $2}')

le awk '{print $2}'imprime essentiellement les noms de fichiers.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.