Problème script shell sous ubuntu

Fermé
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 - Modifié par velocity le 23/12/2011 à 22:54
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 - 24 déc. 2011 à 21:04
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   

A voir également:

2 réponses

Utilisateur anonyme
24 déc. 2011 à 00:02
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
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 6
24 déc. 2011 à 01:24
merci pour votre réponse, ça marche .
0
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 6
24 déc. 2011 à 19:08
#!/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
Utilisateur anonyme
24 déc. 2011 à 20:06
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
velocity Messages postés 204 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 16 octobre 2014 6
24 déc. 2011 à 21:04
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