Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/10/2014, à 15:17

liodegre38

comment utiliser find + size + du

bonjour,
voilà je souhaiterais parcourir une arborescence à partir de /home en excluant les dossier home/backup, home/netlogon et home/workgroups/trend, tout en recherchant puis en affichant les fichiers de + de 30 Mo en indiquant la taille de chacun dans l'ordre croissant et pour finir afficher la taille totale de la recherche tout en bas. Pour l'instant j'en suis là :
find /home  -size +30M -exec du -sh {} \;  qui cherche affiche et liste la taille de chaque fichier de plus de 30 Mo
j'ai lu qu'il y avait la commande prune pour exclure mais je suis un peu perdu, et je n'arrive pas à afficher la taille totale de la recherche tout en bas.
merci pour votre aide

Dernière modification par liodegre38 (Le 23/10/2014, à 15:21)

Hors ligne

#2 Le 23/10/2014, à 23:03

αjet

Re : comment utiliser find + size + du

Voila ma solution:

find /home -type d \( -path /home/backup -o -path /home/workgroups/trend \) -prune -o -size +30M -exec du -b {} \; | awk '{ sum += $1; print $1, "\t", $2 } END { print sum }' | numfmt --to=iec
-type d \( -path /home/backup -o -path /home/workgroups/trend \) -prune -o

cette portion exclut les dossiers que tu ne veux pas dans le compte.

Ensuite, j'utilise awk pour faire la somme sur la 1ere colonne.
Enfin, numfmt formatte les valeurs exprimee en bytes (option -b de la commande du), en unites usuelles (human readable size).


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#3 Le 23/10/2014, à 23:12

liodegre38

Re : comment utiliser find + size + du

merci pour la ligne de commande, je vais tester ça demain, en abusant un peu comment faire si je veux afficher en plus les propriétaires des fichiers
encore merci

Hors ligne

#4 Le 23/10/2014, à 23:21

αjet

Re : comment utiliser find + size + du

Remplace du -c par ls -l, ensuite dans awk change les colonnes. La taille sera en colonne 5 donc tu devra ecrire sum=+$5, etc.


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#5 Le 24/10/2014, à 10:27

liodegre38

Re : comment utiliser find + size + du

merci par contre numfmt ne fonctionne pas mais ce n'est pas très grave.
voici ce que j'ai testé et qui fonctionne même si je pense que cela peut être écrit autrement :
find /home  -size +30M -exec ls -lh {} \; | awk '{ sum += $5; print $1, "\t", $3 , $4 , $5 , $6 , $7 , $8 , $9 , $10 , $11 } END { print sum }'
2 questions me  viennent à l'esprit : puis-je afficher le nombre total de fichier listés en bas de la même façon que la taille totale des fichiers concernés, et est-il possible de faire un alias ?
merci

Hors ligne

#6 Le 24/10/2014, à 10:46

αjet

Re : comment utiliser find + size + du

Deux commentaires:
si tu fais ls -lh, la somme sera fausse, tu risques de melanger des MB et des GB.
Pour que numfmt fonctionne, il faut que le nombre a formatter soit dans la premiere colonne. Donc dans le print, mets $5 en premier.

Pour le nombre total, tu peux rajouter une iteration dans awk: i =+1 et dans END {print sum"\t" i " fichier(s)"}'

Sinon que veux-tu dire par faire un alias?

Dernière modification par αjet (Le 24/10/2014, à 10:47)


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#7 Le 24/10/2014, à 10:51

αjet

Re : comment utiliser find + size + du

Autre solution pour compter le nombre de lignes:
awk 'END { print NR }'


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#8 Le 24/10/2014, à 11:35

liodegre38

Re : comment utiliser find + size + du

je souhaiterais ne pas devoir retaper la ligne de commande à chaque fois, voilà pourquoi je parlais d'alias,
sinon lorsque je tape : find /home -type d \( -path /home/backup -o -path /home/workgroups/trend \) -prune -o -size +30M -exec ls -l {} \; | awk '{ sum+= $5; print $5, "\t",$1 ,$3 ,$4 ,$5 ,$6 ,$7 ,$8 ,$9 ,$10 ,$11 ,$12} END { print sum }' | numfmt --to=iec
j'ai
find: "ls" a terminé son exécution par le signal 13

Hors ligne

#9 Le 24/10/2014, à 12:49

αjet

Re : comment utiliser find + size + du

Tu peux le mettre dans ton alias ou simplement l'enregistrer dans un fichier, par ex list-big-files.sh.
Dans ce cas, rajoute bien le shebang (#!/bin/sh) en premiere ligne du script, change les permissions pour que le script soit executable et enregistre le dans un dossier liste dans la variable d'environnement PATH.

Pour l'erreur, je n'arrive pas a la reproduire. Peut etre un probleme de permission sur les fichiers? As tu essaye de lancer la commande en sudo?


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#10 Le 24/10/2014, à 12:52

αjet

Re : comment utiliser find + size + du

Note: essaie aussi de lancer ton script sans la partie awk. Je viens d'avoir une erreur signal 13 en ayant fait une faute de syntaxe dans le script awk...


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne