Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1474 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Ce script ne veut pas fonctionner

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ce script ne veut pas fonctionner

n°409743
_Faust_
Burn-out général
Posté le 14-02-2004 à 21:26:59  profilanswer
 

Bon, c'est le dernier....
 
Qu'est-ce qui marche pas dans ce foutu script.... :pfff:  
 
Tu rentre la valeur et le dossier et il affiche tous les fichiers qui dépasse la valeur dans le dossier...
 

Code :
  1. #!/bin/bash
  2. echo "Taille min des fichiers a afficher : " $1
  3. echo "dans le repertoire                 : " $2
  4. echo
  5. rm -rf temp
  6. ls -lS $2 | cut -b39-50,57- >> temp
  7. while read ligne
  8. do
  9.            taille=`echo $ligne | cut -f1 -d' '`
  10.            fichier=`echo $ligne | cut -f4 -d' '`
  11.            date=`echo $ligne | cut -f2 -d' '`
  12.            mois=`echo $ligne | cut -f3 -d' '`
  13. for i in $2; do
  14. if [ -f $i ]; then
  15. if [ ${taille} -gt ${1} ];then
  16. echo -e "$fichier $date $mois $taille"
  17. fi
  18. fi
  19. done
  20. done <temp


mood
Publicité
Posté le 14-02-2004 à 21:26:59  profilanswer
 

n°409745
mirtouf
Light is right !
Posté le 14-02-2004 à 21:30:33  profilanswer
 

Messages d'erreurs ?


---------------
-~- Libérez Datoune ! -~- Camarade, toi aussi rejoins le FLD pour que la flamme de la Révolution ne s'éteigne pas ! -~- A VENDRE
n°409748
_Faust_
Burn-out général
Posté le 14-02-2004 à 21:34:19  profilanswer
 

Si je laisse le "if" qui teste si c'est un fichier, j'ai aucun message d'erreur mais il liste rien
 
Si j'enlève ce "if", il liste ce que je veux, mais AUSSI les dossiers, et ca il ne faudrait pas. En plus il me faire un "unary error expected"...Pourtant je compare bien 2 valeures qui se compare...
 
Je suis tellement concentré dedans que je n'y vois plus rien...

n°409792
aigles
Posté le 14-02-2004 à 23:31:31  profilanswer
 

Execute ton script avec affichage des commandes exécutées et analyse se qui se passe.
 
bash -x the_script taille rep 2>&1 | more


---------------
Jean Pierre.
n°409808
_Faust_
Burn-out général
Posté le 15-02-2004 à 00:06:04  profilanswer
 

Peut être que mon code ne fait pas ce que je pense qu'il doit faire...
 
 

Code :
  1. [---------------------]$ bash -x t.sh 40 coco
  2. + echo 'Taille min des fichiers a afficher : ' 40
  3. Taille min des fichiers a afficher :  40
  4. + echo 'dans le repertoire                 : ' coco
  5. dans le repertoire                 :  coco
  6. + echo
  7. + rm -rf temp
  8. + ls -lS coco
  9. + cut -b39-50,57-
  10. + read ligne
  11. ++ echo
  12. ++ cut -f1 '-d '
  13. + taille=
  14. ++ echo
  15. ++ cut -f4 '-d '
  16. + fichier=
  17. ++ echo
  18. ++ cut -f2 '-d '
  19. + date=
  20. ++ echo
  21. ++ cut -f3 '-d '
  22. + mois=
  23. + '[' -f coco ']'
  24. + read ligne
  25. ++ echo 4096 Feb 14 sub
  26. ++ cut -f1 '-d '
  27. + taille=4096
  28. ++ echo 4096 Feb 14 sub
  29. ++ cut -f4 '-d '
  30. + fichier=sub
  31. ++ echo 4096 Feb 14 sub
  32. ++ cut -f2 '-d '
  33. + date=Feb
  34. ++ echo 4096 Feb 14 sub
  35. ++ cut -f3 '-d '
  36. + mois=14
  37. + '[' -f coco ']'
  38. + read ligne
  39. ++ echo 12 Feb 14 goe
  40. ++ cut -f1 '-d '
  41. + taille=12
  42. ++ echo 12 Feb 14 goe
  43. ++ cut -f4 '-d '
  44. + fichier=goe
  45. ++ echo 12 Feb 14 goe
  46. ++ cut -f2 '-d '
  47. + date=Feb
  48. ++ echo 12 Feb 14 goe
  49. ++ cut -f3 '-d '
  50. + mois=14
  51. + '[' -f coco ']'
  52. + read ligne
  53. [------------------]$ bash t.sh 40 coco
  54. Taille min des fichiers a afficher :  40
  55. dans le repertoire                 :  coco
  56. [------------------]$

n°409868
_Faust_
Burn-out général
Posté le 15-02-2004 à 06:20:08  profilanswer
 

Je l'ai modifié un peu mais ca donne pas encore le résultat escompté....
 
-Il ne doit pas lister les répertoires, juste les fichiers
-Il me fait cette erreur
-J'arrive pas à le formater
 

Code :
  1. #!/bin/bash
  2. echo "Taille min des fichiers a afficher : " $1
  3. echo "dans le repertoire                 : " $2
  4. echo
  5. rm -rf temp
  6. #ls -lS $2 | cut -b39-50,57- >> temp
  7. ls -lS $2 >> temp
  8. while read ligne
  9. do
  10.            taille=`echo $ligne | cut -f 5 -d' '`
  11.            fichier=`echo $ligne | cut -f 9 -d' '`
  12.            date=`echo $ligne | cut -f 7 -d' '`
  13.            mois=`echo $ligne | cut -f 6 -d' '`
  14. #for i in $2; do
  15. #if [ -f "$i" ]; then
  16. if [ ${taille} -gt ${1} ];then
  17. echo -e "\t$fichier\t$date\t$mois$taille"
  18. fi
  19. #fi
  20. #done
  21. done <temp
  22. #fin
  23. [--------@--------]$ bash t.sh 60 coco
  24. Taille min des fichiers a afficher :  60
  25. dans le repertoire                 :  coco
  26. t.sh: line 19: [: -gt: unary operator expected
  27.         sub     14      Feb4096
  28.         tp1no5.sh       14      Feb996
  29.         t.sh    14      Feb492
  30.         coloce  14      Feb166
  31. [--------@--------]$

n°409869
BMOTheKill​er
Posté le 15-02-2004 à 07:44:55  profilanswer
 

tu veux du récursif aussi, c'est à dire lister les fichiers des sous-répertoires aussi ?

n°409870
BMOTheKill​er
Posté le 15-02-2004 à 08:26:07  profilanswer
 

bon, avec du récursif :
 


#!/bin/sh
 
taille=$1
rep="$2"
 
[ "$1" = "" ] && read -p "Entrer la taille maximale en octet : " taille || echo "Taille maximale en octet : $taille"
[ "$2" = "" ] && read -p "Entrer le répertoire racine à lister : " rep || echo "Répertoire racine à lister : $rep"
 
count=0
echo
for i in `find "$rep" -type f`
   do
      tf=`du -b $i | cut -f1 -d'/'`
      [ $tf -gt $taille ] && count=`expr $count + 1` && echo "$i : $tf"
   done
 
[ $taille -gt 1 ] && s="s "
[ $count -gt 1 ] && ss="s"
 
echo
echo "Nombre de fichier$ss dans '$rep' dont la taille est supérieure à $taille octet$s: $count"
echo


 
résultat :


<-=[ ~/test-scripts ]=-> ./test
Entrer la taille maximale en octet : 500000
Entrer le répertoire racine à lister : /tmp
 
/tmp/kde-bmo/ksycoca : 1052672
/tmp/coreutils_5.0.91-2_i386.deb : 2449408
/tmp/coreutils-5.1.2-1mdk.i586.rpm : 2244608
/tmp/coreutils-5.0.91.tgz : 2461696
/tmp/coreutils-5.1.2.tgz : 2252800
 
Nombre de fichiers  dans /tmp dont la taille est supérieure à 500000 octets : 5


Message édité par BMOTheKiller le 15-02-2004 à 08:46:38
n°409875
aigles
Posté le 15-02-2004 à 10:03:59  profilanswer
 

_Faust_, je pense que ton problème vient des 'cut'.Dasn le résultat de la commande 'ls' les colonnes sont séparées par plusieurs espaces et pour cut chaque espace délimite un champ (ce n'est pas comme pour le shell).


-rwxr-xr-x    1 jp mkgroup        36 Feb  6 19:43 a.aw
^f1           ^f5


Tu te retrouves avec taille="", ce qui te donne pour le test
if [ -gt val$1 ]; then
d'où le pb de -gt: unary operator expected  
 
Il vaut mieux mettre les opérandes entre guillemets dans le test
if [ "${taille}" -gt "${1}" ]; then
 
Il vaut mieux utiliser 'read' pour décomposer la ligne.
De plus comme tu liste les fichiers par ordre décroissant (-S),
tu peux arrêter de tester dés que tu tu rencontres un fichier plus petit.
[/fixed]
ls -lS $2 | \  
while read perms hlinks owner group taille date mois fichier  
do  
   if [ "${taille}" -gt "${1}" ]
   then  
      echo -e "\t$fichier\t$date\t$mois$taille"  
   else
      break    
   fi  
done
[/fixed]


---------------
Jean Pierre.
n°409876
aigles
Posté le 15-02-2004 à 10:05:11  profilanswer
 

aigles a écrit :

_Faust_, je pense que ton problème vient des 'cut'.Dasn le résultat de la commande 'ls' les colonnes sont séparées par plusieurs espaces et pour cut chaque espace délimite un champ (ce n'est pas comme pour le shell).


-rwxr-xr-x    1 jp mkgroup        36 Feb  6 19:43 a.aw
^f1           ^f5


Tu te retrouves avec taille="", ce qui te donne pour le test
if [ -gt val$1 ]; then
d'où le pb de -gt: unary operator expected  
 
Il vaut mieux mettre les opérandes entre guillemets dans le test
if [ "${taille}" -gt "${1}" ]; then
 
Il vaut mieux utiliser 'read' pour décomposer la ligne.
De plus comme tu liste les fichiers par ordre décroissant (-S),
tu peux arrêter de tester dés que tu tu rencontres un fichier plus petit.


ls -lS $2 | \  
while read perms hlinks owner group taille date mois date3 fichier  
do  
   if [ "${taille}" -gt "${1}" ]
   then  
      echo -e "\t$fichier\t$date\t$mois$taille"  
   else
      break    
   fi  
done


 


---------------
Jean Pierre.
mood
Publicité
Posté le 15-02-2004 à 10:05:11  profilanswer
 

n°410113
_Faust_
Burn-out général
Posté le 15-02-2004 à 17:27:40  profilanswer
 

aigles, ca marche ceci chez toi ou il y a qq chose que je n'ai pas compris?
 

Code :
  1. #!/bin/bash
  2.   echo "Taille min des fichiers a afficher : " $1
  3.   echo "dans le repertoire                 : " $2
  4.   echo
  5. ls -lS $2 | \
  6. while read perms hlinks owner group taille date mois date3 fichier
  7. do
  8.    if [ "${taille}" -gt "${1}" ]
  9.    then
  10.       echo -e "\t$fichier\t$date\t$mois$taille"
  11.    else
  12.       break
  13.    fi
  14. done
  15.   #fin


 

n°410163
aigles
Posté le 15-02-2004 à 19:06:25  profilanswer
 

Désolé, ça ne marche effectivement pas, 'read' ne semble pas capable de lire des données depuis un pipe (avec ksh pas de pb).
 
Voila donc une nouvelle version du script:

Code :
  1. #!/usr/bin/bash
  2. echo "Taille min des fichiers a afficher : " $1
  3. echo "dans le repertoire                 : " $2
  4. echo
  5. ls -lS $2 | tail +2 > $$.tmp
  6. while read perms hlinks owner group taille date mois date3 fichier
  7. do
  8.    if [ "${taille}" -gt "${1}" ]
  9.    then
  10.       echo -e "\t$fichier\t$date\t$mois$taille"
  11.    else
  12.       break
  13.    fi
  14. done < $$.tmp
  15. rm -f $$.tmp


---------------
Jean Pierre.
n°410255
_Faust_
Burn-out général
Posté le 15-02-2004 à 22:08:06  profilanswer
 

bon, grâce à vous ca très bien. J'ai changé quelques trucs pour le peaufiner, et j'ai fais une boucle pour ne pas lister les dossiers.  
 
D'ailleurs, c'est la seule facon que j'ai trouvé pour ne pas lister les dossiers, mais je me demandais si c'était "de la programmation conforme" ou si c'est inhabituel.
 

Code :
  1. #!/usr/bin/bash
  2. min=${1:?"Vous devez specifiez la taille minimum"}
  3. folder=${2:?"Specifiez un dossier"}
  4.   echo -e "\nTaille min des fichiers a afficher : " $min
  5.   echo "dans le repertoire                 : " $folder
  6.   echo
  7.   if [ ! -d $folder ]
  8.   then
  9.   echo "$folder n'est pas un dossier"
  10. else
  11.   ls -lS $folder | tail +2 > $$.tmp
  12.   while read perms hlinks owner group taille date mois date3 fichier
  13.   do
  14.      if [ "${taille}" -gt "${min}" ]
  15.      then
  16.       if  [ "$perms" != "drwx------" ]
  17. then
  18.         echo -e "\t$fichier   \t\t$date $mois\t\t$taille"
  19.     fi
  20. else
  21.           break
  22.      fi
  23.   done < $$.tmp
  24. fi
  25.   rm -f $$.tmp


Message édité par _Faust_ le 15-02-2004 à 22:11:58
n°410410
aigles
Posté le 16-02-2004 à 13:08:37  profilanswer
 

Tu ne devrais pas tester de cette façon si le fichier est un répertoire.
Les permissions sur le répertoires ne sont pas obligatoirement "drwx------", par contre cela commence toujours par "d". Il suffit fonc d'éliminer les fichiers pour lesquels perms commence par "d" :

Code :
  1. ls -lS $folder | tail +2 > $$.tmp
  2. while read perms hlinks owner group taille date mois date3 fichier
  3. do 
  4.    [[ "$perms" =  d* ]] && continue
  5.    [[ "${taille}" -gt "${min}" ]] && break
  6.    echo -e "\t$fichier   \t\t$date $mois\t\t$taille"
  7. done < $$.tmp


---------------
Jean Pierre.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Ce script ne veut pas fonctionner

 

Sujets relatifs
Pg_DUmp : script de sauvegarde, mais demande automatique du password ?Script qui fonctionne, mais
[2.6.2] je n'arrive plus à faire fonctionner ma carte son !Utiliser Lynx - links - W3m dans un script shell
Script à lancé au démarage sous l'user "xyz"Créer un petit menu dans un script bash
serveur, script inscription automatique"depmod : ...Makefile is not an ELF file" ca veut dire koi ? pliz help
[script sh] tester si une partition est montée?Tomcat ne veut pas se lancer sur le port 80
Plus de sujets relatifs à : Ce script ne veut pas fonctionner


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR