Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Expression régulière

13 réponses
Avatar
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

10 réponses

1 2
Avatar
Nicolas George
Dominique wrote in message
<4b9cc0d1$0$15851$:
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.
Avatar
Luc.Habert.00__arjf
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
Avatar
Luc.Habert.00__arjf
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.
Avatar
Emmanuel Florac
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
Avatar
Nicolas George
Emmanuel Florac wrote in message
<4b9cccb9$0$24072$:
ls -l | grep -v "20100311"



Ne jamais parser la sortie de ls.
Avatar
Dominique
Le 14/03/2010 12:00, Nicolas George a écrit :
Dominique wrote in message
<4b9cc0d1$0$15851$:
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
Avatar
Dominique
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
Avatar
Dominique
Le 14/03/2010 13:07, Nicolas George a écrit :
Emmanuel Florac wrote in message
<4b9cccb9$0$24072$:


Ne jamais parser la sortie de ls.



Pourquoi ?

Bon après-midi,

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Avatar
Nicolas George
Dominique wrote in message
<4b9cd587$0$15857$:
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.
Avatar
Fabien LE LEZ
On 14 Mar 2010 12:07:18 GMT, Nicolas George
<nicolas$:

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 ?
1 2