#1 Le 26/07/2011, à 10:02
- iuchiban
Utiliser une chaine générée comme paramètre d'un find
Salut tout le monde,
Je suis en train de faire un script qui nettoie les répertoires de logs des applis au boulot.
Actuellement, je fais un
find ${_REP}/logs/ \( -name \*log\* -o -name \*txt\* -o -name \*zip\* -o -name \*gz\* \) -type f -mtime +30 -exec rm {} \; 2>/dev/null
Mais je voudrais pouvoir paramétrer la chaîne de recherche de noms.
Avec ce bout de code, je génère une chaine "-name \*typ1\* -o ... -name \*typN\*"
#!/bin/bash
set -x
_T="txt sh"
_C=""
for _S in ${_T}
do
_C=$(echo ${_C}"-name \*${_S}\* -o ")
done
echo ${_C%-*}
find . \( ${_C%-*} \)
Mais le find ajoute des ' devant mes \ lors de l'évaluation de la chaîne :
$ ./Test.sh
+ _T='txt sh'
+ _C=
+ for _S in '${_T}'
++ echo '-name \*txt\* -o '
+ _C='-name \*txt\* -o '
+ for _S in '${_T}'
++ echo -name '\*txt\*' -o '-name \*sh\* -o '
+ _C='-name \*txt\* -o -name \*sh\* -o '
+ echo -name '\*txt\*' -o -name '\*sh\*'
-name \*txt\* -o -name \*sh\* <= La chaîne telle que je la veux
+ find . '(' -name '\*txt\*' -o -name '\*sh\*' ')'
Une idée pour ce problème ?
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#2 Le 26/07/2011, à 12:18
- AnsuzPeorth
Re : Utiliser une chaine générée comme paramètre d'un find
Bjr,
Une autre solution, en passant que par des variables:
t=txt
s=sh
regex="\($t\|$s\)"
find . -type f -regex ".*\.$regex" -delete
Dernière modification par AnsuzPeorth (Le 26/07/2011, à 12:20)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#3 Le 26/07/2011, à 12:34
- FRUiT
Re : Utiliser une chaine générée comme paramètre d'un find
#!/bin/sh
_T="txt zip"
for _S in $_T; do _C="${_C}${_C:+"\|"}.*${_S}"; done
find ${_REP}/logs/ -regex "${_C}"
[EDIT] Arf grillé !
Dernière modification par FRUiT (Le 26/07/2011, à 12:39)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#4 Le 26/07/2011, à 12:55
- AnsuzPeorth
Re : Utiliser une chaine générée comme paramètre d'un find
[EDIT] Arf grillé !
Vi, mais moi j'ai juste proposé une ossature, toi tu as proposé LA solution au problème donné
Dernière modification par AnsuzPeorth (Le 26/07/2011, à 12:55)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#5 Le 26/07/2011, à 14:43
- iuchiban
Re : Utiliser une chaine générée comme paramètre d'un find
@FRUiT : en standard, ton astuce ne fonctionnait pas sur mon serveur.
Mais en changeant l'option regextype en egrep, et en modifiant le format de la regex :
_T="txt sh"
_C=""
for _S in ${_T}
do
_C="${_C}${_C:+"\|"}${_S}"
done
echo ${_C}
find . -regextype egrep -regex .*\(${_C}\).*
J'ai bien tous mes fichiers txt et sh qui ressortent.
Je peux changer mes types en mettant sh$ pour ne pas sortir les .sh.sav par exemple.
Merci les gars
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne