Script KSH
Bonjour,
S'il vous plaît, j'aurais besoin d'aide sur un script ksh.
J'ai des fichiers sous cette forme :
Parmi ces fichiers, je dois déplacer ceux qui ont une combinaison "incorrecte" dans un répertoire poubelle.
Dans mon script, j'ai déclaré un tableau qui contient toutes les combinaisons correctes. Ensuite j'ai fait une boucle pour le parcourir et parcourir les fichiers que je veux traiter et une condition qui permet de détecter les combinaisons incorrectes et les déplacer :
Malheureusement, quand j'exécute le script, il déplace tous les fichiers ... Quelqu'un peut m'aider sur ce script s'il vous plaît ?
Merci
S'il vous plaît, j'aurais besoin d'aide sur un script ksh.
J'ai des fichiers sous cette forme :
HST_HST35G02_EDP_R0+45_G02R00C00_5909_I1523254.DATAE00
HST_HST35G02_EDP_H5+63_G02R00C00_5799_I1600063.DATAE00
HST_HST35G02_EDP_Q2+44_G02R00C00_5801_I1500213.DATAE00
HST_HST35G02_EDP_T1+31_G02R00C00_5801_I1500213.DATAE00
HST_HST35G02_EDP_R0+14_G02R00C00_5801_I1500213.DATAE00
Parmi ces fichiers, je dois déplacer ceux qui ont une combinaison "incorrecte" dans un répertoire poubelle.
Dans mon script, j'ai déclaré un tableau qui contient toutes les combinaisons correctes. Ensuite j'ai fait une boucle pour le parcourir et parcourir les fichiers que je veux traiter et une condition qui permet de détecter les combinaisons incorrectes et les déplacer :
#!/bin/ksh
DRCFR="1G+91 2G+93 3G+91 4G+94 A0+59 B2+33 C0+54 E0+21 F4+59 H3+63 H5+07 J1+83 J2+83 J4+07 K2+34 L1+54 M1+44 N2+45 P0+33 Q2+35 R0+14 S0+21 T1+31 U1+77 U2+79 U3+74 U6+78 W4+77"
set -A TABDRCFR $DRCFR
FICREPEDP=$(find /data/flf/35gchg/files/rejetChg/incft_HST/ -type f | grep "HST_HST35G02_EDP")
set -A TABFICREPEDP $FICREPEDP
i=0
for FICEDP in ${TABFICREPEDP[@]}
do
while [ $i -lt ${#TABDRCFR[@]} ]
do
affichEDP=`ls $FICEDP | cut -c60-64`
if [ $affichEDP != `echo ${TABDRCFR[$i]}` ]
then
mv $FICEDP /data/flf/35gchg/files/rejetChg/pcr_poubelle_HST/
else
echo OK
break
fi
i=$((i+1))
done
done
Malheureusement, quand j'exécute le script, il déplace tous les fichiers ... Quelqu'un peut m'aider sur ce script s'il vous plaît ?
Merci
A voir également:
- Script KSH
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
- Script download - Télécharger - Édition & Programmation
1 réponse
Bonjour,
Tu peux réaliser ton script beaucoup plus simplement et en une commande à l'aide d'
Dans un premier temps, je cherche les chaînes "correcte" partout dans le nom de fichier et dans un second temps je te montrerai comment ne chercher ce motif qu'à l'index 60.
Supposons que tes fichiers soient listés grâce à une commande arbitraire (disons le résultat d'un
C'est à ces fichiers que nous allons appliquer le traitement (dans ton cas, le
Dans ton sript je n'ai pas trop compris pourquoi tu considérais l'index 60, par rapport à ton exemple je pense que ce serait plutôt l'index 17 (si on indexe les caractères à partir de 0). En complète l'expression en jetant les 17 premiers caractères
Il ne reste plus qu'à injecter le résultat de cette commande dans
Bonne chance
Tu peux réaliser ton script beaucoup plus simplement et en une commande à l'aide d'
egrep.
Dans un premier temps, je cherche les chaînes "correcte" partout dans le nom de fichier et dans un second temps je te montrerai comment ne chercher ce motif qu'à l'index 60.
Supposons que tes fichiers soient listés grâce à une commande arbitraire (disons le résultat d'un
find). Moi j'ai mis tes noms de fichiers dans un fichier
toto.txt, donc la commande
cat toto.txtme les liste. Sur cette liste, je filtrer les lignes d'intérêt avec
egrep:
cat toto.txt | egrep "G\+91|2G\+93|3G\+91|4G\+94|A0\+59|B2\+33|C0\+54|E0\+21|F4\+59|H3\+63|H5\+07|J1\+83|J2\+83|J4\+07|K2\+34|L1\+54|M1\+44|N2\+45|P0\+33|Q2\+35|R0\+14|S0\+21|T1\+31|U1\+77|U2\+79|U3\+74|U6\+78|W4\+77")
C'est à ces fichiers que nous allons appliquer le traitement (dans ton cas, le
mv). Si tu veux appliquer le filtre contraire, il suffit de passer l'option
-và
egrep.
Dans ton sript je n'ai pas trop compris pourquoi tu considérais l'index 60, par rapport à ton exemple je pense que ce serait plutôt l'index 17 (si on indexe les caractères à partir de 0). En complète l'expression en jetant les 17 premiers caractères
cat toto.txt | egrep --color ".{17}(G\+91|2G\+93|3G\+91|4G\+94|A0\+59|B2\+33|C0\+54|E0\+21|F4\+59|H3\+63|H5\+07|J1\+83|J2\+83|J4\+07|K2\+34|L1\+54|M1\+44|N2\+45|P0\+33|Q2\+35|R0\+14|S0\+21|T1\+31|U1\+77|U2\+79|U3\+74|U6\+78|W4\+77)"
Il ne reste plus qu'à injecter le résultat de cette commande dans
mv. En bash, on utiliserait
$(...), en shell
`...`et en ksh je te laisse chercher, mais avec un peu de chance c'est la même syntaxe :-) Voilà à quoi ça ressemble en bash :
mv $(cat toto.txt | egrep ".{17}G\+91|2G\+93|3G\+91|4G\+94|A0\+59|B2\+33|C0\+54|E0\+21|F4\+59|H3\+63|H5\+07|J1\+83|J2\+83|J4\+07|K2\+34|L1\+54|M1\+44|N2\+45|P0\+33|Q2\+35|R0\+14|S0\+21|T1\+31|U1\+77|U2\+79|U3\+74|U6\+78|W4\+77") dossier_destination
Bonne chance