Too many words from `` - Shell/Batch - Programmation
Marsh Posté le 20-02-2006 à 13:54:38
Je te propose une alternative :
|
Marsh Posté le 20-02-2006 à 14:38:12
merci Elmoricq
j'ai refait le script en sh avec les indications que m'avais donné juste avant que tu modifies ton post
ca marche beaucoup mieux
le voici
Citation : |
La ou ca pourrait etre optimisé c'est dans le find
j'en fait un pour chaque element
dans ton alternative le find est répété dans la boucle donc ca dois prendre le meme temps je pense
on dois pouvoir faire une requete plus complexe avec le find mais j'ai pas trop envie de chercher.
merci beaucoup Elmoricq
ps: rm -rf c'est parcque "vplinks" c'est un repertoire
Marsh Posté le 20-02-2006 à 15:07:17
Je n'ai pas modifié mon post, quelqu'un a effacé le sien, je n'ai pas retenu qui c'était.
Néanmoins en sh/ksh, la boucle foreach du csh devient :
for i in .TEMP .LOCK .nfs #RD root _temp .attr .CATPart |
Côté optimisation, on s'en moque totalement, du moment que le principe de base est correct (pas si l'on fait n'importe quoi qui met 2h au lieu de 2min).
C'est du script-shell, pas un programme clustering de la NASA hein, sur ce genre de chose, la maintenabilité est bien plus importante qu'une quelconque micro-optimisation.
Marsh Posté le 20-02-2006 à 15:21:44
oki doki,
merci beaucoup de ton aide.
c'est quand meme bien sympa d'avoir de l'aide sur les forums quand on est bloqué
Marsh Posté le 20-02-2006 à 13:37:23
J' ai fait un script qui recherche certains fichier et dossiers par leur noms et les suppriment
le voici
#!/bin/csh
if ( $1 == "" ) then
set dossier=$cwd
else
set dossier=$1
endif
echo "nettoyage fichiers inutiles"
/bin/rm -rf /tmp/fichier_a_supprimer_$USER
find $dossier -name '*.TEMP*' -print > /tmp/fichier_a_supprimer_$USER
find $dossier -name '*.LOCK*' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '.nfs*' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '*#RD*' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '_pd.gbf' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '_pd.bgf' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '*root*' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name 'vp_links' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '*_temp*' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '_pict' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '_pict' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '*.attr' -print >> /tmp/fichier_a_supprimer_$USER
find $dossier -name '*.CATPart' -print >> /tmp/fichier_a_supprimer_$USER
if (-z /tmp/fichier_a_supprimer_$USER) then
echo "Pas de fichier a supprimer"
else
echo " *** fichiers supprime dans /tmp/fichier_a_supprimer_$USER *** "
echo " "
foreach fic (`cat /tmp/fichier_a_supprimer_$USER`)
/bin/rm -rf $fic
end
endif
echo " changements droits globaux 755"
chmod -R 755 $dossier
echo "creation des dossiers vp_links"
/export/data/it-store/scripts/caddsenabvp $dossier
echo " changements proprietaire cadds5:caomeca"
chown -R cadds5:caomeca $dossier
Lorsque je lance le scripts sur un dossier contenant un petit nombre de dossier ca fonctionne bien.
par contre dans un repertoire contenant 811 repertoires j'ai ce resultat
# de.csh maj-nbes
nettoyage fichiers inutiles
*** fichiers supprime dans /tmp/fichier_a_supprimer_root ***
Too many words from ``
apparemment quand le fichier /tmp/fichier_a_supprimer est trop long le foreach ne marche plus.
Quelqu'un a une idée de comment contourner le probleme
merci d'avance