Expression régulière

Le
Dominique
Bonjour,

Soit un ls -l qui me renvoie les informations suivantes :


-rw- 1 normal normal 306626 2010-02-27 11:41
grisbi_060_20100227T114139.gsb
-rw- 1 normal normal 308630 2010-02-27 11:55
grisbi_060_20100227T115547.gsb
-rw- 1 normal normal 306750 2010-02-28 08:55
grisbi_060_20100228T085548.gsb
-rw- 1 normal normal 308745 2010-02-28 12:47
grisbi_060_20100228T124719.gsb
-rw- 1 normal normal 306888 2010-03-02 04:52
grisbi_060_20100302T045227.gsb
-rw- 1 normal normal 308915 2010-03-03 19:00
grisbi_060_20100303T190043.gsb
-rw- 1 normal normal 307016 2010-03-05 07:35
grisbi_060_20100305T073532.gsb
-rw- 1 normal normal 309195 2010-03-05 18:01
grisbi_060_20100305T180111.gsb
-rw- 1 normal normal 307539 2010-03-06 09:23
grisbi_060_20100306T092340.gsb
-rw- 1 normal normal 309493 2010-03-09 06:31
grisbi_060_20100309T063100.gsb
-rw- 1 normal normal 307389 2010-03-11 06:14
grisbi_060_20100311T061409.gsb

etc.

Tous ces fichiers ont, dans une partie de leur nom, un motif de la forme
AAAAMMJJ. Par exemple, pour le dernier, j'ai 20100311

Je sais lister les fichiers qui ont ce motif avec :
ls -l *20100311*

Comme pourrais-je faire pour n'avoir pas ce motif en sortie de ls ? En
sous produit, j'aimerais pouvoir supprimer avec rm les fichiers qui
n'ont pas ce motif.

Je vous remercie et vous souhaite une bonne journée,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #21375631
Dominique wrote in message
Comme pourrais-je faire pour n'avoir pas ce motif en sortie de ls ?



Avec zsh : ls *~*20100311*

sous produit, j'aimerais pouvoir supprimer avec rm les fichiers qui
n'ont pas ce motif.



rm à la place de ls.
Luc.Habert.00__arjf
Le #21375811
Dominique :

Je sais lister les fichiers qui ont ce motif avec :
ls -l *20100311*

Comme pourrais-je faire pour n'avoir pas ce motif en sortie de ls ? En
sous produit, j'aimerais pouvoir supprimer avec rm les fichiers qui
n'ont pas ce motif.



for f in * .[!.]* ..?*; do
case $f in
*20100311*) ;;
*) rm -f "$f";;
esac
done

(par pédantisme, j'ai fait du pur sh, avec un « ! » pour la négation dans
des crochets; avec zsh et sans doute bash, il faut mettre un « ^ » à la
place, car ils utilisent le « ! » pour extraire une commande de
l'historique.)

ou

find . '!' -name '*20100311*' -print0 | xargs -0 rm
Luc.Habert.00__arjf
Le #21375931
Luc Habert :

*) rm -f "$f";;



Au fait, si on veut faire autre chose qu'un rm, il faut mettre un

test -e "$f" &&

avant la commande, car si un motif ne matche rien, il s'expanse en lui-même
et non le néant.
Emmanuel Florac
Le #21376021
Le Sun, 14 Mar 2010 11:56:17 +0100, Dominique a écrit:


Comme pourrais-je faire pour n'avoir pas ce motif en sortie de ls ?




En utilisant

ls -l | grep -v "20100311"


--
Question: How does a large software project get to be one year late?
Answer: One day at a time!
Fred Brooks
Nicolas George
Le #21376221
Emmanuel Florac wrote in message
ls -l | grep -v "20100311"



Ne jamais parser la sortie de ls.
Dominique
Le #21376201
Le 14/03/2010 12:00, Nicolas George a écrit :
Dominique wrote in message
Comme pourrais-je faire pour n'avoir pas ce motif en sortie de ls ?



Avec zsh : ls *~*20100311*



Bonjour et merci pour cette piste. Mais je n'ai pas zsh. J'utilise bash
« par défaut ».

existe-t-il donc une solution par expression régulière valide avec bash ?

Bon après-midi,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Dominique
Le #21376191
Le 14/03/2010 12:27, Luc Habert a écrit :
Dominique :

Je sais lister les fichiers qui ont ce motif avec :
ls -l *20100311*

Comme pourrais-je faire pour n'avoir pas ce motif en sortie de ls ? En
sous produit, j'aimerais pouvoir supprimer avec rm les fichiers qui
n'ont pas ce motif.



for f in * .[!.]* ..?*; do
case $f in
*20100311*) ;;
*) rm -f "$f";;
esac
done



Merci pour ce script. Pourrais-tu m'expliquer ton motif .[!.]* ..?* ?

Bon après-midi,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Dominique
Le #21376181
Le 14/03/2010 13:07, Nicolas George a écrit :
Emmanuel Florac wrote in message


Ne jamais parser la sortie de ls.



Pourquoi ?

Bon après-midi,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Nicolas George
Le #21376361
Dominique wrote in message
Pourquoi ?



Parce que ce n'est pas prévu pour, et donc qu'on a très peu de garanties
quant à la présentation exacte.

Plus pragmatiquement, parce que le comportement vis-à-vis de caractères
inhabituels dans les noms de fichiers n'est pas utilisable de manière fiable
en script.
Fabien LE LEZ
Le #21376641
On 14 Mar 2010 12:07:18 GMT, Nicolas George

ls -l | grep -v "20100311"



Ne jamais parser la sortie de ls.



Quand il s'agit d'afficher à l'écran, ça ne pose pas de problème.
S'il s'agit de passer le résultat à autre chose (surtout "rm"), je
suis d'accord. J'imagine que "find" est plus adéquat ?

Au fait, quand on a des espaces dans les noms de fichiers, et qu'on
veut utiliser le couple find/xargs, on écrit
find ... -print0 | xargs -0 ...

Mais... y a-t-il un moyen de mettre grep entre les deux, pour
filtrer ?
Publicité
Poster une réponse
Anonyme