web-dev-qa-db-fra.com

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

par exemple, j'ai une commande qui montre combien d'espace le dossier 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 comme numérique.

Comment joindre du folder et du -h folder pour voir le résultat trié en tant que du folder, mais avec la première colonne de du -h folder

P.S. C'est juste un exemple. cette technique pourrait être très utile pour moi (si c'est possible)

19
UAdapter

Voici une approche plus générale. Obtenez le résultat de du folder et du -h folder dans deux fichiers différents.

du folder > file1
du -h folder > file2

La partie clé est la suivante: concaténer file1 et file2 ligne par ligne, avec un délimiteur approprié.

paste -d '#' file1 file2 > file3

(en supposant que # n'apparaisse pas dans file1 et file2)

Maintenant, triez file3. Notez que ceci triera sur le contenu de file1 et divisera par les liens de file2. Extrayez le résultat pertinent en utilisant cut:

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

Regardez également man sort pour d'autres options.


Vous pouvez également enregistrer ceci sous un alias, pour une 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
11
Prateek

Essayez quelque chose comme:

du -h folder | sort -h

Alternatives: -n pour le tri numérique

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

33
Allu2

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

Malheureusement, la réponse exacte qui trie K M G est difficile et complexe:

Vous pouvez aliaser toute la commande du avec une commande qui trie les informations lisibles à l’aide de cette commande.

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 -n ne 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
4
Kat Amsterdam

La commande GNU _ sorta l'option suivante:

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

Pour avoir cette option sous BSD/OSX, vous pouvez installer sortà partir de coreutils(via brewname__) et ajouter le dossier bin à votre PATHdans vos fichiers rc.

Donc, la commande ressemblerait à ceci:

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

Ouvrez votre terminal avec Ctrl+Alt+t et type:

  du -sk * | sort -rn 
0
rɑːdʒɑ

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

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

qui se traduit par:

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

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.

0
belacqua

Celui que j’ai trouvé qui fonctionne sur tous les systèmes quelle que soit la version (sort -h ne fonctionne pas pour moi) est

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

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

0
yahiaelgamal