158 votes

Comment puis-je obtenir de l'unix la commande rechercher pour afficher la taille du fichier avec le nom de fichier?

Si je la commande rechercher comme suit:

$find . -name *.ear

Il imprime:

./dir1/dir2/earFile1.ear
./dir1/dir2/earFile2.ear
./dir1/dir3/earFile1.ear

Ce que je veux "imprimer" à la ligne de commande est le nom et la taille:

./dir1/dir2/earFile1.ear  5000 KB
./dir1/dir2/earFile2.ear  5400 KB
./dir1/dir3/earFile1.ear  5400 KB

165voto

shyam Points 4133
find . -name '*.ear' -exec ls -lh {} \;

juste le h supplémentaire de jer.drab.org's réponse. permet de gagner du temps la conversion de MO mentalement ;)

145voto

Leigh Caldwell Points 4176

Vous devez utiliser -exec ou -printf. Printf fonctionne comme ceci:

find . -name *.ear -printf "%p %k KB\n"

-exec est plus puissant et permet d'exécuter des commandes arbitraires - de sorte que vous pouvez utiliser une version de " ls " ou " wc "pour imprimer le nom de fichier avec d'autres informations. "l'homme trouvez' vous montrera les arguments disponibles pour printf, qui peut faire beaucoup plus que juste de la taille du fichier.

[edit] -printf n'est pas dans l'officiel de la norme POSIX, afin de vérifier si elle est prise en charge par votre version. Cependant, la plupart des systèmes modernes utilise GNU trouver ou la même version élargie, donc il ya une bonne chance qu'il sera mis en œuvre.

47voto

Michael Cramer Points 2540

une solution simple est d'utiliser l'option-ls en trouver:

find . -name \*.ear -ls

Qui vous donne chaque entrée dans la normale "ls-l" format. Ou, pour obtenir de la puissance que vous semblez être à la recherche d', ceci:

find . -name \*.ear -printf "%p\t%k KB\n"

Ce qui vous donnera le nom de fichier suivi de la taille en KO.

31voto

dmazzoni Points 6586

L'utilisation de gnu trouver, je pense que c'est ce que vous voulez. Il trouve tous les fichiers réels et pas les répertoires (type f), et pour chacun imprime le nom du fichier (%p), une tabulation (\t), la taille en kilo-octets (%k), le suffixe "KO", puis un saut de ligne (\n).

trouver . -type f -printf '%p\t%k KB\n'

Si le printf commande ne formate pas les choses de la façon dont vous le souhaitez, vous pouvez utiliser exec, suivi par la commande que vous souhaitez exécuter sur chaque fichier. Utilisation de {} pour le nom de fichier, et de mettre fin à la commande avec un point-virgule (;). Sur la plupart des coquillages, tous les trois de ces caractères doivent être échappés avec une barre oblique inverse.

Voici une solution simple qui recherche et imprime à l'aide de "ls -lh", qui va vous montrer la taille en forme lisible par l'homme (k pour kilo-octets, M pour méga-octets):

trouver . -type f -exec ls -lh {} \;

Encore une autre alternative, "wc -c" affichera le nombre de caractères (octets) dans le fichier:

trouver . -type f -exec wc -c {} \;

4voto

tpgould Points 1114

Awk peut fixer la sortie pour donner à tout ce que l'interlocuteur le demande. Sur mon système Solaris 10, trouver -ls imprime taille (en KO) que le deuxième champ, donc:

% find . -name '*.ear' -ls | awk '{print $2, $11}'
5400 ./dir1/dir2/earFile2.ear
5400 ./dir1/dir2/earFile3.ear
5400 ./dir1/dir2/earFile1.ear

Sinon, utilisez -exec ls -lh et de choisir la taille de champ à partir de la sortie. De nouveau sur Solaris 10:

% find . -name '*.ear' -exec ls -lh {} \; | awk '{print $5, $9}'
5.3M ./dir1/dir2/earFile2.ear
5.3M ./dir1/dir2/earFile3.ear
5.3M ./dir1/dir2/earFile1.ear

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