Lancer sh pour liste de dossier

Lancer sh pour liste de dossier - Shell/Batch - Programmation

Marsh Posté le 13-04-2012 à 20:14:46    

Bonsoir à tous,

 

J'ai créer un petit script de nettoyage, qui supprime des fichiers :

 
Code :
  1. find ./ -type d -name "*eaDir" -exec rm -rf {} \; -print 2>/dev/null
  2. find ./ -type f -name "Desktop.ini" -exec rm -rf {} \; -print 2>/dev/null
  3. find ./ -type f -name "Thumbs.db" -exec rm -rf {} \; -print 2>/dev/null
 

J'aimerais créer un lanceur de ce script qui va le lancer dans une liste de répertoire que je vais lui renseigner.

 

Comment faire ?
Merci d'avance


Message édité par lokomass le 13-04-2012 à 20:15:12
Reply

Marsh Posté le 13-04-2012 à 20:14:46   

Reply

Marsh Posté le 13-04-2012 à 23:50:42    

salut,
 
Pour toi, c'est quoi un lanceur ? c'est censé faire quoi, comment ?
être accessible de où, comment ?
etc
 
déjà, il pourrait n'y avoir qu'un seul find

Code :
  1. find ./ -type d _name "*eadir" -o -type f -name "Desktop.ini" -o -type f -name "Thumbs.db" -exec rm -f {} \+ 2>/tmp/find.log


pourquoi -print ? pour le debuggage ?

Reply

Marsh Posté le 14-04-2012 à 00:08:37    

Merci de ta réponse, je veux dire par la.
Ceci serait le fichier lancer.sh.
Et j'aimerai un autre fichier qui s'appelle runLancer.sh qui va prendre en compte une liste de dossier pour lancer le "lancer.sh" dans chacun des dossiers.
Exemple :
 
Liste=toto,tata,titi;
for each $i in Liste do
find ./ -type d _name "*eadir" -o -type f -name "Desktop.ini" -o -type f -name "Thumbs.db" -exec rm -f {} \+ 2>/tmp/find.log
done
 
La synhtaxe c'est pas ça mais pour que tu comprenne quoi ;)

Reply

Marsh Posté le 14-04-2012 à 02:25:08    

pour le faire en restant POSIX, il faut jouer sur l'IFS (Internal Field Separator)

Code :
  1. #!/bin/sh
  2. separateur=":" #un caractère qu'on est sûr de ne pas trouver dans un des noms de la Liste.
  3. s="$separateur"
  4. Liste="repertoire1${s}repertoire2${s}repertoire3"
  5. oIFS="$IFS"
  6. IFS="$s"
  7. for dir in $Liste
  8. do find $dir/ -type d _name "*eadir" -o -type f -name "Desktop.ini" -o -type f -name "Thumbs.db" -exec rm -f {} \+ 2>/tmp/find.log
  9. done
  10. IFS="$oIFS"

Reply

Marsh Posté le 14-04-2012 à 02:59:35    


 
Pourquoi faire une boucle alors que find peut gérer plusieurs dossiers d'un coup ???
Accessoirement, si on cherche à effacer un dossier nommé xxxeadir alors la commande rm doit avoir l'option "-r"

Code :
  1. find repertoire1/ repertoire2/ repertoire3/ -type d -name "*eadir" -o -type f -name "Desktop.ini" -o -type f -name "Thumbs.db" -exec rm -rf {} \+ 2>/tmp/find.log


Message édité par Sve@r le 14-04-2012 à 03:01:05

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

Sujets relatifs:

Leave a Replay

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