Taille des fichiers supérieure à une taille spécifique ?

Taille des fichiers supérieure à une taille spécifique ? - Shell/Batch - Programmation

Marsh Posté le 23-04-2010 à 14:45:40    

Bonjour,
 
Est-ce possible d'afficher la liste de tout les fichiers normaux d'un répertoire dont la taille est supérieure à une taille définie, en sachant que le nom du répertoire ainsi que la taille spécifique sont introduit en argument ?
 
Parce que je ne vois pas du tout comment faire ><
 
J'ai écris ce code mais il ne fonctionne pas :
 

Code :
  1. #bin!/bash
  2. echo "Quel repertoire à analyser ?"
  3. read repertoire
  4. for ligne in repertoire
  5. do
  6. if [ `echo $ligne | cut -d ' ' -f5` -lt 500 ]
  7. then
  8. echo  $ligne
  9. fi
  10. done


 
Il me dit comme erreur [: repertoire est attendu comme un nombre entier comme expression  
 
Je vous remercie d'avance ^^

Message cité 1 fois
Message édité par Hello87 le 23-04-2010 à 15:17:54
Reply

Marsh Posté le 23-04-2010 à 14:45:40   

Reply

Marsh Posté le 23-04-2010 à 16:18:49    

un truc du genre

Code :
  1. DIRECTORY=$1
  2. SIZE=$2
  3. ls -l $DIRECTORY | egrep ^- | awk '{ if($5 > '$SIZE') print $9}'
 

egrep ^- prend les lignes qui commencent par "-" (pas les répertoires (d), pas les liens (l))

 


edit: sinon avec find tu peux aussi chercher des fichiers de type fichier avec un paramètre pour la taille (mais je ne sais pas si on peut dire "> taille" )
edit2: peut-être avec find -size +500


Message édité par art_dupond le 23-04-2010 à 16:28:36

---------------
oui oui
Reply

Marsh Posté le 23-04-2010 à 16:37:55    

J'ai testé ton code mais il ne fonctionne pas :s
 
Ne connaissant pas la commande awk, je ne vois pas où est l'erreur car il me dit : awk line 1 syntaxe error at or near ) ^^


Message édité par Hello87 le 23-04-2010 à 17:04:05
Reply

Marsh Posté le 23-04-2010 à 17:21:35    

SIZE vaut bien quelque chose ? (t'as remplacé le $2 par une valeur ?)


---------------
oui oui
Reply

Marsh Posté le 23-04-2010 à 17:25:51    

Non j'ai juste recopier ton code tel quel pour le tester.


Message édité par Hello87 le 23-04-2010 à 17:28:16
Reply

Marsh Posté le 23-04-2010 à 22:15:16    

A mon avis, le $SIZE dans les simple quotes, il va pas fonctionner comme voulu [:figti]  
 
Plutot quelque chose comme ca :

DIRECTORY=$1
SIZE=$2
ls -l $DIRECTORY | egrep ^- | awk -v size=$SIZE '{ if($5 > size) print $9; }'


Ou même (quitte à faire du awk, autant l'utiliser pleinement) :

DIRECTORY=$1
SIZE=$2
ls -l $DIRECTORY | awk -v size=$SIZE '/^-/ { if($5 > size) print $9; }'

(faudrait juste vérifier que c'est bien -v pour passer des paramètres au script awk)

Message cité 1 fois
Message édité par mrbebert le 23-04-2010 à 22:19:41
Reply

Marsh Posté le 24-04-2010 à 06:24:04    

mrbebert a écrit :

A mon avis, le $SIZE dans les simple quotes, il va pas fonctionner comme voulu [:figti]  


il est hors des quotes justement :o


---------------
oui oui
Reply

Marsh Posté le 24-04-2010 à 20:34:20    

Ah ouais :ouch:  
J'avais pas pensé à ce genre d'astuce :pt1cable:

Reply

Marsh Posté le 25-04-2010 à 13:46:10    

Hello87 a écrit :

J'ai écrit ce code mais il ne fonctionne pas :
 

Code :
  1. #!/bin/bash
  2. echo "Quel repertoire à analyser ?"
  3. read repertoire
  4. for ligne in repertoire
  5. do
  6. if [ `echo $ligne | cut -d ' ' -f5` -lt 500 ]...


 
Il me dit comme erreur [: repertoire est attendu comme un nombre entier comme expression


Tu cherches à traiter le champ n° 5 de ta ligne comme si la ligne contenait le résultat de "ls -l".
Or ta ligne contient simplement le mot "repertoire". Si tu veux que ta ligne contienne "ls -l", faut le dire qqpart...
 

Code :
  1. #!/bin/bash
  2. echo "Quel repertoire à analyser ?"
  3. read repertoire
  4. for ligne in `ls -l repertoire`
  5. do
  6. if [ `echo $ligne | cut -d ' ' -f5` -lt 500 ]...


Message édité par Sve@r le 08-05-2010 à 01:01:04

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 29-04-2010 à 16:05:37    

Euh.... pour recentrer le débat, la commande FIND ne ferait-elle pas le boulot ?
 
localisation = premier argument
taille = option SIZE ( ! attention, il faut convertir la taille en block : 1 block = 512 octets)
fichier normal = option -type f
 
Donc tu aurais une commande du genre :
 
find /mon_repertoire -type f -size 2000 (exemple des fichiers de plus d'1 MO => 512octets * 2 * 1000 )

Message cité 1 fois
Message édité par Kerrozen le 29-04-2010 à 16:06:09

---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !
Reply

Marsh Posté le 29-04-2010 à 16:05:37   

Reply

Marsh Posté le 05-05-2010 à 13:52:07    

Kerrozen a écrit :

Euh.... pour recentrer le débat, la commande FIND ne ferait-elle pas le boulot ?


 
Si si tout à fait. Elle fera le boulot bien mieux et bien plus rapidement qu'un script. Toutefois ce script avait tellement d'erreur de conception (erreurs qui peuvent se reproduire dans d'autres scripts) que j'ai préféré (à titre d'exemple uniquement) indiquer en quoi le script était mal conçu...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 07-05-2010 à 16:55:04    

RoooAAhaAHAHA qu'est-ce qu'il est méchant ce Sve@r ^^


---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed