17 votes

Triage des tailles de fichiers lisibles par l'homme

Comment trier une liste en utilisant un tri de taille de fichier lisible par l'homme, un tri numérique prenant en compte l'identifiant de taille (G, M, K) ? Puis-je trier la sortie "du -sh" par exemple ?

Problème : Considérez le problème de la liste des fichiers/dossiers et de leur tri par taille. Vous pouvez y parvenir en exécutant :

du -s * | sort -n

Cela liste les fichiers/dossiers triés par leurs tailles. Cependant, la valeur de taille affichée est en octets (ou mégaoctets, ou gigaoctets si vous choisissez).

Il serait souhaitable de pouvoir trier en fonction des valeurs lisibles par l'homme, afin de pouvoir exécuter quelque chose d'analogique à

du -sh * | 

Et avoir un dossier de 1,5 Go qui apparaît après 2,0 Mo.

33voto

Jan Points 101

Utilisez GNU coreutils >= 7.5 :

du -hs * | sort -h

(Extrait de cette question serverfault)

Page de manuel

Édition : Vous pouvez vérifier vos versions en utilisant du --version et sort --version si vous utilisez les versions GNU. Si vous utilisez homebrew, vous devrez peut-être utiliser gdu et gsort.

4voto

Selon ce que je sais, il n'existe pas de commande standard pour faire cela.

Il y a diverses solutions de contournement, qui ont été discutées lorsque la même question a été posée sur Stack Overflow : Comment puis-je trier la sortie de du -h par taille

3voto

Patrick Points 148

Si vous êtes simplement préoccupé par les fichiers de plus de 1 Mo, comme il semble que vous l'êtes, vous pouvez utiliser cette commande pour les trier et utiliser awk pour convertir la taille en Mo :

du -s * | sort -n | awk '{print int($1 / 1024)"M\t"$2}'

Encore une fois, cela arrondit les tailles au Mo le plus proche. Vous pouvez le modifier en le convertissant dans l'unité de votre choix.

2voto

Mark Crossfield Points 21

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 -d ou sort -h:

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

ce qui donne :

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

1voto

Thomas Points 715

Voici un autre:

$ du -B1 | sort -nr | perl -MNumber::Bytes::Human=format_bytes -F'\t' -lane 'print format_bytes($F[0])."\t".$F[1]'

Vous pourriez avoir à faire un

$ cpan Number::Bytes::Human

d'abord.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X