Shell-script (Besoin d'aide)

Shell-script (Besoin d'aide) - Divers - Programmation

Marsh Posté le 08-05-2007 à 21:59:53    

Bonsoir, j'ai un exercice assez complexe à faire, voila l'énnoncé:
 
 
 
Écrire un script-shell nettoyer.sh qui supprime à partir du répertoire courant tous les fichiers dont le nom se termine
par un caractère ’∼’ (même si le nom du fichier commence par un caractère ’.’) ou dont le nom débute et se termine par un caractère ’#’ ; ces fichiers sont fréquemment des fichiers temporaires. La suppression de ces fichiers devra s’effectuer récursivement dans toute la sous-arborescence du répertoire courant et devra fonctionner même à l’intérieur des sous-répertoire dont le nom commence par un caractère ’.’. Outre l’ensemble des commandes internes au shell bash, les seules commandes externes utilisables sont dirname, basename et bien entendu rm.
 
Votre script-shell NE DEVRA PAS utiliser les commandes ls, find, grep ou egrep.
 
 

Piste:
Je pensais que l'on pouvais par exemple afficher les fichiers que l'on souhaitait avec quelque chose qui ressemblerait a :
 
echo */[#]*[#] .*[~] *[~]
 
puis les supprimer avec un for:
 
 
for elu in $(echo */[#]*[#] .*[~] *[~]);
do
rm $elu
done
 
Bien sûr j'ecris tous ca, mais j'ai pas réussi à mettre ca en forme ....
 
Si on pourrait me guider sur cette piste ou une autre ca serait cool !

 
 :jap:  Merci d'avance !

Reply

Marsh Posté le 08-05-2007 à 21:59:53   

Reply

Marsh Posté le 08-05-2007 à 22:34:32    

Comment fonctionne la récursivité en shell script ?
 
Comme en C ?

Reply

Marsh Posté le 09-05-2007 à 00:08:31    

y a pas moyen à coup d'un tar --remove-files dont l'output est redirigé vers /dev/null ?


---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
Reply

Marsh Posté le 09-05-2007 à 00:16:08    

bah si il peut pas utiliser ls ca m etonnerait que tar soit autoriser
Sinon j suis pas top en shell script mais pour la recursivité c est rm -r (a utiliser avec precaution :D )

Reply

Marsh Posté le 09-05-2007 à 00:21:15    

il faut demander sur programmation :o
je transfère ... [:cupra]


---------------
Intermittent du GNU
Reply

Marsh Posté le 09-05-2007 à 08:46:20    

Pas de petit-idée ?

Reply

Marsh Posté le 09-05-2007 à 10:03:48    

?

Reply

Marsh Posté le 09-05-2007 à 10:34:46    

Voila un algorithme du script, si vous avez des suggestions pour le traduire, elles sont les bienvenues :
 
 
 
fonction chercher()
debut
 
dossier = $1
 
Pour tous les éléments du dossier
 Si (element est un fichier)   et  (element commence et fini par #)  ou  (element fini par ~)  ou  (élément commence par . et fini par ~)
   
    supprimer element
 Sinon
  Si element est un repertoire
   
   chercher() $element
  fin si
 fin si
 
fin
 
chercher () . // On oublie pas de lancer la recherche dans le repertoire courant

Reply

Marsh Posté le 09-05-2007 à 10:36:14    

Parcourir le contenu d'un repertoire :
for i in * .*; do
  blablabla
done
 
if [ -d $i ] pour verifier si $i est un repertoire.


Message édité par wackevat le 09-05-2007 à 10:39:16
Reply

Marsh Posté le 09-05-2007 à 12:00:53    

Autre chose ?

Reply

Marsh Posté le 09-05-2007 à 12:00:53   

Reply

Marsh Posté le 09-05-2007 à 13:25:48    

EDIT : ne pas tenir compte de ma solution, puisqu'il n'est pas possible d'utiliser "find" (et pourquoi pas programmer sans les mains et dans le noir ?)
 
Avec la commande find, la recherche se fait dans les sous-répertoires.

 find . -type f -exec ls {} \; ...autres paramètres... >liste_fichiers.tmp
 cat liste_fichiers.tmp|while read fic
 do
    ... supprimer un fichier...      
 done


Message édité par olivthill le 09-05-2007 à 13:27:56
Reply

Marsh Posté le 09-05-2007 à 17:28:51    

Mon prof vient de me donner une info, il faut utiliser le resultat d'une commande echo comme un vecteur de variable ...
 
J'ai essayé, mais ca ne fonctionne pas, quelqu'un vois la ou les erreur et les modification à faire:
 
function nettoyer (){
 
elus=$(echo * .*)
 
for elu in $elus;do
if [ -e $elu -a -d $elu -a $elu != ".." -a $elu != "." ]
then
    cd $elu
    nettoyer
else
   if [ $elu=".*~" -o $elu="*#" -o $elu="*~" ]
   then
   rm $elu
   fi
fi
done
}


Message édité par etudiant69 le 09-05-2007 à 17:29:23
Reply

Marsh Posté le 09-05-2007 à 18:04:10    

Pas d'idée ?

Reply

Sujets relatifs:

Leave a Replay

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