tous les fichiers sauf...

6 réponses
Avatar
didier
Bonjour,

Soit un répertoire dans lequel sont des fichiers avec des
extensions diverses, comme .ga , .bu , .zo , .meuh et d'autres.
Il est facile d'agir sur tous les fichiers ayant une même extension,
par exemple « rm *.meuh ».
Mais agir sur tous les fichiers sauf les .meuh ?
ou sauf les .meuf et les .zo ?
avec une boucle for peut-être, mais je ne trouve pas
la syntaxe correcte.
Vous savez faire ?

syntaxiquement,
Didier.

6 réponses

Avatar
Nicolas George
didier , dans le message <52f3a517$0$2275$, a
écrit :
Soit un répertoire dans lequel sont des fichiers avec des
extensions diverses, comme .ga , .bu , .zo , .meuh et d'autres.
Il est facile d'agir sur tous les fichiers ayant une même extension,
par exemple « rm *.meuh ».
Mais agir sur tous les fichiers sauf les .meuh ?
ou sauf les .meuf et les .zo ?



Avec zsh, « setopt extendedglob » et utiliser l'opérateur ~.
Avatar
Bruno Ducrot
On 2014-02-06, Nicolas George wrote:
didier , dans le message <52f3a517$0$2275$, a
écrit :
Soit un répertoire dans lequel sont des fichiers avec des
extensions diverses, comme .ga , .bu , .zo , .meuh et d'autres.
Il est facile d'agir sur tous les fichiers ayant une même extension,
par exemple « rm *.meuh ».
Mais agir sur tous les fichiers sauf les .meuh ?
ou sauf les .meuf et les .zo ?



Avec zsh, « setopt extendedglob » et utiliser l'opérateur ~.



Et pour compléter sur les shells type sh (car parfois, on a pas
le choix de son shell) :

Avec ksh, liste tous les fichiers, sauf *.meuh et *.zo :
$ echo !(*.meuh|*.zo)

Cette syntaxe fonctionne avec bash avec éventuellement un
shopt extglob on

Par contre, je ne pense pas que l'on ait un équivalent pour
dash.

Enfin, pour csh, on peut utiliser ^ :
# echo ^*.meuh


Dans tous les cas, bien lire les docs des différents
shells.

A plus,

--
Bruno Ducrot

A quoi ca sert que Ducrot hisse des carcasses ?
Avatar
Benoit Izac
Bonjour,

le 06/02/2014 à 16:07, didier a écrit dans le message
<52f3a517$0$2275$ :

Soit un répertoire dans lequel sont des fichiers avec des
extensions diverses, comme .ga , .bu , .zo , .meuh et d'autres.
Il est facile d'agir sur tous les fichiers ayant une même extension,
par exemple « rm *.meuh ».
Mais agir sur tous les fichiers sauf les .meuh ?
ou sauf les .meuf et les .zo ?
avec une boucle for peut-être, mais je ne trouve pas
la syntaxe correcte.



for f in *
do echo "$f" | grep -q '.meuh$' || faire_quelquechose "$f"
done

for f in *
do echo "$f" | grep -Eq '.(meuh|zo)$' || ls -d "$f"
done

--
Benoit Izac
Avatar
François Patte
Le 06/02/2014 16:07, didier a écrit :
Bonjour,

Soit un répertoire dans lequel sont des fichiers avec des
extensions diverses, comme .ga , .bu , .zo , .meuh et d'autres.
Il est facile d'agir sur tous les fichiers ayant une même extension,
par exemple « rm *.meuh ».
Mais agir sur tous les fichiers sauf les .meuh ?
ou sauf les .meuf et les .zo ?
avec une boucle for peut-être, mais je ne trouve pas
la syntaxe correcte.
Vous savez faire ?

syntaxiquement,
Didier.




en bash:

cd repertoire

export GLOBIGNORE=*.meuh:*.zo

rm *


--
François Patte
Université Paris Descartes
Avatar
Nicolas George
François Patte, dans le message <ld0piv$hft$, a
écrit :
export GLOBIGNORE=*.meuh:*.zo



Pas d'export, c'est un paramètre interne au shell.

(Heureusement ! Ce serait une faille certainement exploitable sinon.)
Avatar
didier
Le Thu, 06 Feb 2014 15:07:03 +0000, didier a écrit :

Bonjour,



Re bonsoir,

et merci à tous.
Marrant de voir le nombre de solutions possibles
pour faire un même truc...
« rm !(*.meuh|*.zo) », la seule que j'ai eu le temps
d'essayer, fonctionne parfaitement sous bash, impec !

impeccablement,
Didier.