2010-12-15 99 views
2

Script Shell pour lister récursivement les fichiers dans un répertoire, ce qui est énorme. J'utilise:Script Shell pour lister récursivement les fichiers les plus volumineux dans un répertoire

find <path> -mtime +20 -exec ls -ls {} \; | sort -n -r | head -100 | awk '{print $10}' 

Questions:

  • Plus lent exécution
  • Je ne suis pas avoir lu les autorisations dans quelques sous-répertoires

Y at-il une meilleure façon d'y parvenir? J'ai essayé:

du <path> | sort -n -r | head -n 100 

Beaucoup plus rapide mais pas aussi efficace.

+0

essayez aussi ls -R, mais ils utiliseraient tous les mêmes appels système à l'intérieur, donc devraient avoir des performances comparables – bobah

+0

'... ls -s ... awk '{print $ 2}'' pourrait être un petit peu plus portable. –

Répondre

0

trouver - taille + k -atime + -printf "% s, \ t% a, \ t% p \ n" | trier -nr

vous donnera la sortie désirée

ici le sike est sur kb et l'âge est le dernier temps d'accès.

1

En fonction de la distribution de la taille des fichiers de votre find est de trouver, vous pouvez envisager d'utiliser la -size principale à éliminer beaucoup de petits poissons avant que la liste se fait larguer sur sort. Si c'est quelque chose que vous exécutez régulièrement, notez quand vous commencez à obtenir moins de 100 lignes sur head et utilisez cela comme une indication qu'il est temps de réduire la taille limite que vous donnez find.

Le manque d'autorisations n'est pas un problème que vous allez pouvoir surmonter sans que les permissions sur les répertoires en question ne soient modifiées ou que vos privilèges ne soient augmentés pour que vous puissiez les lire.

1

du est presque là, essayez

du -aS | sort -n -r | head -n 100 

que vous ne renvoient que les fichiers volumineux à l'exclusion des répertoires

+0

Pourrait ajouter -b ou -k à la commande du pour des tailles plus lisibles par l'homme –

1

trouver a une directive -printf pratique:

find . -type f -printf "%s\t%p\n" | sort -nr | head -n 100