web-dev-qa-db-fra.com

Trouver des fichiers avec la taille dans Unix

Je cherche une commande Unix pour imprimer les fichiers avec sa taille. Je l'ai utilisé mais cela n'a pas fonctionné.

find . -size +10000k -print.

Je veux imprimer la taille du fichier avec le nom du fichier/répertoire.

51
Kannan Lg
find . -size +10000k -exec ls -sd {} +

Si votre version de find n'accepte pas la notation + (Qui agit plutôt comme xargs le fait), vous pouvez utiliser (GNU find et xargs, donc find prend probablement en charge + de toute façon):

find . -size +10000k -print0 | xargs -0 ls -sd

ou vous pouvez remplacer le + par \; (et vivre avec l'inefficacité relative de cela), ou vous pouvez vivre avec des problèmes causés par des espaces dans les noms et utiliser le portable:

find . -size +10000k -print | xargs ls -sd

Le -d Sur les commandes ls garantit que si un répertoire est trouvé (peu probable, mais ...), les informations du répertoire seront imprimées, pas les fichiers qu'il contient. Et si vous recherchez des fichiers de plus de 1 Mo (comme le suggère maintenant un commentaire supprimé), vous devez ajuster le paramètre +10000k Sur 1000k Ou peut-être +1024k, ou +2048 (pour les blocs de 512 octets, l'unité par défaut de -size). Cela listera la taille puis le nom du fichier. Vous pouvez éviter le recours à -d En ajoutant -type f À la commande find, bien sûr.

60
Jonathan Leffler

La recherche peut être utilisée pour imprimer la taille du fichier en octets avec% s en tant que printf. % h /% f affiche le préfixe de répertoire et le nom de fichier, respectivement.\n force une nouvelle ligne.

Exemple

find . -size +10000k -printf "%h/%f,%s\n"

Sortie

./DOTT/extract/DOTT/TENTACLE.001,11358470
./DOTT/Day Of The Tentacle.nrg,297308316
./DOTT/foo.iso,297001116
9
Adam

En supposant que vous ayez GNU trouver:

find . -size +10000k -printf '%s %f\n'

Si vous voulez une largeur constante pour le champ de taille, vous pouvez faire quelque chose comme:

find . -size +10000k -printf '%10s %f\n'

Notez que -size +1000k sélectionne des fichiers d’au moins 10 240 000 octets (k vaut 1024, et non 1 000). Vous avez dit dans un commentaire que vous vouliez des fichiers de plus de 1 M; si c'est 1024 * 1024 octets, alors ceci:

find . -size +1M ...

fera l'affaire - sauf qu'il imprimera également la taille et le nom des fichiers exactement 1024 * 1024 octets. Si cela compte, vous pouvez utiliser:

find . -size +1048575c ...

Vous devez décider quel critère vous voulez.

6
Keith Thompson