111 votes

Bash - Comment trouver le plus grand fichier dans un répertoire et ses sous-répertoires?

Nous commençons tout juste un UNIX classe et l'apprentissage d'une variété de commandes Bash. Notre mission consiste à effectuer diverses commandes sur un répertoire qui a un certain nombre de sous-dossiers.

Je sais comment faire la liste et de compter tous les fichiers à partir du dossier racine à l'aide de:

find . -type l | wc -l

Mais je voudrais savoir où aller à partir de là, afin de trouver le plus grand fichier dans le répertoire entier. J'ai vu des choses concernant un du de la commande, mais nous n'avons pas appris que, dans le répertoire de choses que nous avons apprises, je suppose que nous devons en quelque sorte le connecter à l' ls -t commande.

Et pardonnez-moi si mon "lingo" n'est pas correct, je suis encore à s'habituer à elle!

130voto

tamsler Points 789

Citation de ce lien-

Si vous voulez trouver et imprimer le top 10 des plus grands noms de fichiers (pas répertoires) dans un répertoire et ses sous répertoires

$ find . -printf '%s %p\n'|sort -nr|head

Pour restreindre la recherche à présent l'utilisation de répertoire "-maxdepth 1" avec trouver.

$ find . -maxdepth 1 -printf '%s %p\n'|sort -nr|head

Et pour imprimer le top 10 des plus gros "fichiers et répertoires":

$ du -a . | sort -nr | head

** Utilisez le "head-n X" au lieu de la seule "tête" ci-dessus pour imprimer le top X plus gros fichiers (dans tous les exemples ci-dessus)

68voto

xpro-fedtest Points 468

Pour trouver le top 25 des fichiers dans le répertoire courant et ses sous-répertoires:

find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25

Ce sera de sortie le top 25 des fichiers par un tri basé sur la taille des fichiers via le "sort-nr-k5" les canalisations de commande.

10voto

nneonneo Points 56821
find . -type f | xargs ls -lS | head -n 1

sorties

-rw-r--r--  1 nneonneo  staff  9274991 Apr 11 02:29 ./devel/misc/test.out

Si vous voulez juste le nom de fichier:

find . -type f | xargs ls -1S | head -n 1

Cela évite d'utiliser awk et vous permet d'utiliser tous les indicateurs que vous souhaitez en ls.

Mise en garde. Parce qu' xargs essaie d'éviter de créer trop de lignes de commande, cela peut échouer si vous l'exécutez sur un répertoire avec beaucoup de fichiers, car ls se termine l'exécution de plus d'une fois. Ce n'est pas un problème insurmontable (vous pouvez recueillir l' head -n 1 la production de chacun ls d'invocation, et exécutez ls -S encore, en boucle jusqu'à ce que vous avez un seul fichier), mais il n'mar cette approche quelque peu.

8voto

ghoti Points 14996

Ce les listes des fichiers de manière récursive si elles sont normales fichiers, trie par le 7e bataillon (qui est la taille de mon find sortie; vérifier le vôtre), et montre que dans le premier fichier.

find . -type f -ls | sort +7 | head -1

La première option pour find est le début du chemin pour la recherche récursive. Un type d' f recherche pour les fichiers normaux. Notez que si vous essayez d'analyser ce qu'un nom de fichier, vous pouvez ne pas si le nom de fichier contient des espaces, retours à la ligne ou d'autres caractères spéciaux. Les options d' sort également varier selon le système d'exploitation. Je suis sous FreeBSD.

Un "mieux", mais plus complexe et plus lourd solution serait de disposer d' find parcourir les répertoires, mais peut-être utiliser stat pour obtenir les détails sur le fichier, puis peut-être utiliser awk de trouver la taille la plus grande. Notez que la sortie de stat dépend aussi de votre système d'exploitation.

6voto

Steve Points 18420

Cela permettra de trouver le plus gros fichier ou un dossier dans votre répertoire de travail:

ls -S /path/to/folder | head -1

Pour trouver les plus gros fichiers dans tous les sous-répertoires:

find /path/to/folder -type f -exec ls -s {} \; | sort -nr | awk 'NR==1 { $1=""; sub(/^ /, ""); print }'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X