Problème script shell sous ubuntu

velocity Messages postés 251 Statut Membre -  
velocity Messages postés 251 Statut Membre -
Bonjour à tous,

J'ai par faute extrait le dossier de openssh dans le dossier /usr/src/bin en voulant l'installer et maintenant je veut supprimer les fichier qui ont été ajoutés alors j'ai ecrit un script pour supprimer les fichier avec la date de modification d'aujoud'hui mais j'ai des erreurs que j'ai pas pu résoudre .
Pourriez vous voir c quoi le problème ?

merci d'avance,

#!/bin/sh   

echo "enter day of modification: "   
read day   

for file in 'ls'   
do   
   echo "check change date for: $file"   
   change_date = 'stat $file | grep -i change | cut -d ' ' -f 2'   

   change_day = 'stat $file | grep -i change | cut -d ' ' -f 2 | cut -d '-' -f 3'   

   if [ $change_day -eq $day ]    
   then   
      echo "delete file $file last changed on $change_date ? (Y/N)"  
      read c   
      if [ $c -eq 'y' || $c -eq 'Y' ]    
      then   
         rm $file   
      fi   
   fi   
done   

2 réponses

  1. Utilisateur anonyme
     
    salut,

    for elem in 'ls'
    C'est une mauvaise idée, parce que la boucle for va tourner sur chaque élément retourné par ls, si un nom de fichier a un espace, ça va pas aller.

    stat permet d'obtenir les dates d'un fichier, pas besoin de grep cut.

    Il ne doit pas y avoir d'espaces autour d'un signe égal qui effectue une assignation.

    La prochaine fois, donne nous les messages d'erreur.
    0
    1. velocity Messages postés 251 Statut Membre 6
       
      merci pour votre réponse, ça marche .
      0
    2. velocity Messages postés 251 Statut Membre 6
       
      #!/bin/sh
      
      echo "enter day of modification: "
      read day
      
      echo "creating backup file.."
      
      for file in 'ls'
      do
         echo "check change date for: $file"
         change_date='stat $file | grep -i change | cut -d ' ' -f 2'
         
         change_day='stat $file | grep -i change | cut -d ' ' -f 2 | cut -d '-' -f 3'   
      
         if [ "$change_day" -eq "$day" ]
         then
               echo "delete file $file last changed on $change_date ? (Y/N)"
               read c
               if [ $c = "y" -o $c = "Y" ] 
               then
      	    cp -R $file "backup/$file"
                  if [ -f $file ]
                  then
                     rm $file
                  elif [ -d $file]
                  then         
         	       rm -R $file
                  fi
              fi
         fi
      done
      0
  2. Utilisateur anonyme
     
    Essaye ça
    date -d"$(stat -c %y "$file")" +%A)
    au lieu de stat | grep | cut | cut.
    Tu n'as qu'à l'adapter pour change_date.

    et je te le dis encore for elem in 'ls', ça craint.
    for f in *
    do
       echo "$f"
    done
    0
    1. velocity Messages postés 251 Statut Membre 6
       
      vous avez raison pour les nom des fichier avec des espaces, mais j'ai déjà executé le script et ça a marché correctement par change qu'il n'y a pas d'espaces dans les noms .
      Merci comme même pour l'information, j'ai cherché une méthode pareille avant d'ecrire le script mais je l'ai pas trouvé, La prochaine fois je m'en souviendrai .
      Merci encore pour votrre aide .
      0