Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2008, 13h42   #1
Membre régulier
 
Avatar de dj_benz
 
Inscription : octobre 2002
Messages : 150
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2002
Messages : 150
Points : 81
Points : 81
Par défaut Taille des fichiers recherchés

Bonjour,

Je souhaiterais créer un script capable de me donner la taille totale des fichiers correspondant à un critère. J'explique pourquoi: j'utilise un système de corbeille, et tous les soirs, je vide une partie de la corbeille en fonction de certaines règles, et j'aimerai connaitre la taille des fichiers correspondant à ces règles.
Pour supprimer, j'utilise:
Code :
find /.../RecycleBin/  <regles>  -exec  rm -f {} \;
Celà permet de supprimer les fichiers repérés par find. Mais comment additionner la taille de ces fichiers? Dois-je utiliser une commande annexe et un pipe? faire la même recherche avec un "ls -l" à la fin et une commande qui filtre la taille et une autre commande qui additionne?

Merci.
Benz
dj_benz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 14h03   #2
Membre expérimenté
 
Avatar de Pilru
 
Homme
Dev ASP.NET/jQuery ; Admin ORACLE
Inscription : septembre 2007
Messages : 418
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Dev ASP.NET/jQuery ; Admin ORACLE

Informations forums :
Inscription : septembre 2007
Messages : 418
Points : 531
Points : 531
La réponse est dans : man find
Pilru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 14h06   #3
Membre régulier
 
Avatar de dj_benz
 
Inscription : octobre 2002
Messages : 150
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2002
Messages : 150
Points : 81
Points : 81
J'ai déjà cherché, je viens d'y refaire un tour et je n'ai pas trouvé la réponse à MA question.
J'ai bien vu l'option -size, mais elle permet de chercher un fichier dont on connait la taille, pas de connaitre la taille d'un fichier qu'on cherche.

A moins que je l'ai loupée. Quelle est cette option?
dj_benz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 16h48   #4
Membre habitué
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 145
Points : 145
Je pense qu'avec une boucle et la commande il y'a moyen de s'en sortir.
Delwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 17h33   #5
Membre régulier
 
Avatar de dj_benz
 
Inscription : octobre 2002
Messages : 150
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2002
Messages : 150
Points : 81
Points : 81
J'ai déjà essayé un truc comme ça:
Code :
find /.../ <regles>  -exec du -k
Ca ne donne rien: chaque exécution de "du" est indépendante et on a les tailles indépendamment.
Code :
find /.../ <regles>  |  du -k
Mais "du" n'accepte pas l'entrée de flux (pipe), et s'exécute à la fin du "find" sur le répertoire courant.

J'ai pensé à un truc bricolé avec:
Code :
find /.../ <regles>  |  ls -l
Ca liste les fichiers avec leur taille en début de ligne, de cette façon, on peut essayer, avec une autre commande, de couper la taille en octet et avec encore une autre, de faire une addition. Mais là, je m'y connais pas assez! J'ai pas ces commandes dans mon tiroir...
Des suggestions??

Merci.
Benz
dj_benz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 13h32   #6
Membre habitué
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 145
Points : 145
Un truc comme ca ne t'irait pas ? :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
nb=0
result=0
 
for nb in $( find . | du | cut -f1 )
do
 #	nb=$(du -k $fic)
   echo "nb = $nb"
	 result=$(( $result + $nb ))
done 
 
echo "result=$result ko";
Chez moi je du prend le pipe, mais j'suis en ksh
Delwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 20h37   #7
Membre chevronné

 
Avatar de D[r]eadLock
 
Inscription : mai 2002
Messages : 504
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 504
Points : 622
Points : 622
Citation:
Envoyé par dj_benz Voir le message
JJ'ai bien vu l'option -size, mais elle permet de chercher un fichier dont on connait la taille, pas de connaitre la taille d'un fichier qu'on cherche.
Citation:
Envoyé par man find
find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
Code :
1
2
3
find <regles> -printf "%s+" > file
echo "0" >> file
bc < file
__________________
1)Avant de poster, merci de lire les règles. 2)Utiliser [code] [/code] pour quoter le code ! 3)Conseils pour le forum C [a lire en entier!]
D[r]eadLock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2008, 16h24   #8
Membre régulier
 
Avatar de dj_benz
 
Inscription : octobre 2002
Messages : 150
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2002
Messages : 150
Points : 81
Points : 81
Ah, ben voilà la commande que je cherchais: "bc"! Et la fameuse option "-printf "%s" ". Merci D[r]eadLock!

Mon script ressemble maintenant à ça:
Code :
1
2
3
4
5
6
7
8
9
 
SIZEFILE=/root/tmp/totalsize.txt
echo > $SIZEFILE
 
find /.../ <regles> -printf "%s+" >> $SIZEFILE
echo 0 >> $SIZEFILE
 
echo "Total des fichiers supprimés: `bc < $SIZEFILE` octets"
rm -f $SIZEFILE
Mais je rencontre un problème: la commande "find" liste aussi les répertoires qui correspondent aux règles (alors que je ne supprime pas les répertoires de la corbeille). J'ai donc dans mon résultat autant de fois 4096 que de répertoires (non supprimés) ce qui me fausse le calcul.
Comment dire à "find" de ne pas lister les répertoires?

[EDIT] Je viens de trouver: il faut simplement utiliser l'option de "find": -type f, et ça ne liste que les fichiers. Facile! [/EDIT]
dj_benz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h58.


 
 
 
 
Partenaires

Hébergement Web