Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1408 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Too many words from ``

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Too many words from ``

n°1309605
boiboi
crôa
Posté le 20-02-2006 à 13:37:23  profilanswer
 

J' ai fait un script qui recherche certains fichier et dossiers par leur noms et les suppriment
 
le voici

Citation :


#!/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
 

Citation :


# 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
 
 

mood
Publicité
Posté le 20-02-2006 à 13:37:23  profilanswer
 

n°1309622
Elmoricq
Modérateur
Posté le 20-02-2006 à 13:54:38  profilanswer
 

Je te propose une alternative :
 


#!/bin/csh
if ( "$1" == "" ) then
        set dossier=$cwd
else
        set dossier=$1
endif
 
echo "Nettoyage fichiers inutiles"
\rm -rf /tmp/fichier_a_supprimer_$USER
 
foreach i ( .TEMP .LOCK .nfs #RD root _temp .attr .CATPart )
   echo "Nettoyage : *${i}*..."
   find $dossier -name "*${i}*" -exec \rm -f {} \;
end
 
foreach i ( _pd.gbf _pd.bgf vp_links _pict )
   echo "Nettoyage : $i..."
   find $dossier -name "${i}" -exec \rm -f {} \;
end

n°1309659
boiboi
crôa
Posté le 20-02-2006 à 14:38:12  profilanswer
 

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 :


#!/bin/sh
if [ "$1" = "" ]
then
        dossier=$cwd
else
        if [ ! -d $1 ]
        then
                echo " $1 n existe pas "
        exit
        else
                dossier=$1
        fi
fi
echo "nettoyage fichiers inutiles"
/bin/rm -f /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 " "
cat /tmp/fichier_a_supprimer_$USER |while read i
do
        rm -rf "$i"
done
fi


 
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


Message édité par boiboi le 20-02-2006 à 14:41:54
n°1309676
Elmoricq
Modérateur
Posté le 20-02-2006 à 15:07:17  profilanswer
 

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  
do
...
done


 
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.

n°1309691
boiboi
crôa
Posté le 20-02-2006 à 15:21:44  profilanswer
 

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é


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Too many words from ``

 

Sujets relatifs
SELECT * FROM (TRANSFORM trucmuche c'est possible ?select * from table where nom = ' "+string+"' n marche pas en datagrid
erreur : "too many characters in constant"sqlplus : problème union 1 to many avec dates
time_t et localtime : assignment from incompatible pointer typeerreur "too many initializer"
erreur "too many initialifonction mail: header From
à l'aide : requete SQL : "FROM" variable ?commande mailto et champs from
Plus de sujets relatifs à : Too many words from ``


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR