7
votes

Comment trouver les 10 plus grands fichiers dans un répertoire donné?

Comment trouver les 10 plus gros fichiers d'un répertoire donné, avec perl ou bash?

EDIT:

  • J'ai besoin de cela pour être récursif.
  • Je veux seulement voir des fichiers volumineux, pas de grands répertoires.
  • J'ai besoin de cela pour travailler sur Mac OS X 10.6 (Version de la recherche de Mac OS X 10.6 (S).

3 commentaires

Avez-vous besoin que cela soit récursif?


J'ai besoin d'autres d'écrire du code pour moi aussi!


Pas mon intention; Je n'essayais que de trouver la meilleure solution.


4 Réponses :


5
votes
$ alias ducks
alias ducks='du -cs * |sort -rn |head -11'

1 commentaires

Cette sortie ne comprend pas de sous-répertoires?



5
votes

C'est un moyen de le faire à Perl. (Remarque: version non récursive, selon la version antérieure de la question) xxx pré>

Cependant, je suis sûr qu'il y a de meilleurs outils pour le travail. P>

ETA: strong> version récursive, en utilisant Fichier :: Trouver FORT> : P>

perl -MFile::Find -wE '
    sub wanted { -f && push @files, $File::Find::name }; 
    find(\&wanted, "/given/dir"); 
    @files = sort { -s $b <=> -s $a } @files; 
    say for @files[0..9];'


2 commentaires

Réservoirs pour donner la solution Perl. Je me demande si cela a une empreinte mémoire de mémoire significativement différente de la solution à l'aide de trouver ?


@ user001 je ne sais pas comment trouver fonctionne en interne, donc je ne peux pas dire. Il peut également varier en fonction de votre système de fichiers et de votre nombre de fichiers. Vous auriez besoin de l'essayer et de voir.



6
votes

Ceci imprime les 10 fichiers les plus grands de la répertoire actuel.

find . -type f -printf "%s %p\n" | sort -nr | awk '{print $2}' | head -10


5 commentaires

Comment imprimer également leurs tailles pour vérifier que le résultat est correct?


$ trouver. -Type f -printf "% s% p \ n" | Trier -nr | Head -10 fonctionne.


En réalité, cela ne fonctionne pas sur Mac OS X. Il n'a pas d'option Printf.


@ user001 sans utiliser l'option -Printf , vous pouvez essayer ceci: trouver. -Type f -ls | awk '{imprimer 7 $ "" 11 $}' | Trier -nr | Head -10


trouver. -Type f -ls | awk '{imprimer 7 $ "" 11 $}' | Trier -nr | Head -10 Imprime rien.



1
votes

Que diriez-vous -

[jaypal:~/Temp] find . -type f -exec ls -l {} + | awk '{print $5,$NF}' | sort -nr | head -n 10
8887 ./backup/GTP/GTP_Parser.sh
8879 ./backup/Backup/GTP_Parser.sh
6791 ./backup/Delete_HIST_US.sh
6785 ./backup/Delete_NORM_US.sh
6725 ./backup/Delete_HIST_NET.sh
6711 ./backup/Delete_NORM_NET.sh
5339 ./backup/GTP/gtpparser.sh
5055 ./backup/GTP/gtpparser3.sh
4830 ./backup/GTP/gtpparser2.sh
3955 ./backup/GTP/temp1.file


4 commentaires

Ce n'est pas une solution à ce que j'ai demandé. Il génère un tas de répertoires.


@ user001 J'ai ajouté une sortie d'échantillon à partir de la doublure testée sur Mac OSX Lion


Merci, cela fonctionne correctement. Je l'ai rencontré dans un mauvais répertoire où il n'y avait pas de fichier.


@ user001 :) Pas de soucis. J'étais un peu sceptique de la réponse acceptée depuis son utilisation Printf Option n'est pas disponible dans Mac .