[shell script] repertoires numerotés

Fermé
aVr69 Messages postés 2 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 4 août 2008 - 31 juil. 2008 à 23:39
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 5 août 2008 à 10:00
Bonjour,
Pour contourner un bug logiciel, j'aimerais pouvoir supprimer automatiquement certains répertoires qui sont de la forme 'tirages_xxxx' avec xxxx variant de 0001 à 9999.
Pas bien à l'aise en script shell, j'ai ecrit sous cygwin, à l'aide du net, le script suivant :
--------------------
# fichier suprep.sh
# syntaxe: suprep.sh indice1 indice2
# ex: suprep.sh 2 158 pour effacer les répertoires de 'tirages_002' jusqu'à 'tirages_0158'
#!/bin/sh
PATH=.:/usr/bin:${PATH}
...
find . -depth -type d -name "tirages_0*[${1}-${2}]" -exec rm -rf {} \;
--------------------
Explication:
tirages_0* pour constriure le repertoire tirages_0 ou tirages_00 ou tirages_000...
[${1}-${2}] pour avoir une valeur comprise entre ${1} et ${2}

Mon problème c'est que cela ne fonctionne que pour les répertoire entre 0001 et 0009 ! je pense que mon expression régulière n'est pas bonne, est-ce que quelqu'un à une idée ?

Merci d'avance et bonnes vacances.
aVr
A voir également:

5 réponses

linuxnico Messages postés 204 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 8 octobre 2010 10
1 août 2008 à 07:58
pourquoi fait tu une recherche de repertoire?

un pauv'

pour i de $depart a $fin fait
rm -rf tonfichier.0$i
finpour

non, ou je me trompe???
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
1 août 2008 à 10:06
hello
et comme ça

find . -depth -type d -name "tirages_0`seq 2 158 | printf '%03d'`" -ls

-ls pour essayer
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
1 août 2008 à 11:10
plus simple
find . -depth -type d -name "tirages_0`seq -f '%03d' 2 158`" -ls
0
aVr69 Messages postés 2 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 4 août 2008
4 août 2008 à 23:37
Bonjour à tous et merci pour votre aide.
J'ai bossé sur ce script cet après-midi.
En fait, j'ai mixer les deux solutions pour avoir le script suivant:

#!/bin/bash
# param1 = repertoire ou supprimer les repertoires tirages
# param2 = indice de debut
# param3 = indice de fin
PATH=.:/usr/bin:${PATH}
for i in $(seq -f '%04.0f' ${2} ${3})
do
find ${1} -depth -type d -name "tirage_$i" -exec rm -rf {} \;
done

Je n'ai pas réussi à faire une seule ligne en incluant la commande "seq" dans le "find" comme dans la solution de dubcek. Il y a certainement plus simple mais celui-ci fonctionne sous cygwin (et je le comprend...).
Pour répondre à linuxnico, je fais la recherche de répertoire car je ne sais pas ou seront les repertoires "tirages_xxxx" à détruire, je connais juste le repertoire destination. De plus, je souhaitais automatiser cette suppression.
Encore merci,
aVr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
5 août 2008 à 10:00
et comme ça, pour n'exécuter qu'une fois la commande find
LISTE=$(seq -f 'tirage_%04.0f' ${2} ${3})
find ${1} -depth -type d -name "$LISTE" -exec rm -rf {} \;
0