tous les fichiers sauf...

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #25974332
didier , dans le message é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 ~.
Bruno Ducrot
Le #25974572
On 2014-02-06, Nicolas George wrote:
didier , dans le message é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 ?
Benoit Izac
Le #25974842
Bonjour,

le 06/02/2014 à 16:07, didier a écrit dans le message

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
François Patte
Le #25974992
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
Nicolas George
Le #25975062
François Patte, dans le message écrit :
export GLOBIGNORE=*.meuh:*.zo



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

(Heureusement ! Ce serait une faille certainement exploitable sinon.)
didier
Le #25975372
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.
Publicité
Poster une réponse
Anonyme