Le dossier actuel contient des sous-dossiers, dont chacun contient entre autres un fichier que je veux traiter.Correspondance de motif Bash: exclure une chaîne donnée
Fichiers Je suis intéressé par ressembler à:
someSubFolderCommonPathName*/*commonStringInFileName*
Mon problème est que j'ai aussi des fichiers que je ne ai pas à traiter dont le nom est le même que ci-dessus et qui se terminent par _stringNotToMatch
:
someSubFolderCommonPathName*/*commonStringInFileName*_stringNotToMatch
Comment puis-je les exclure dans mon expression correspondant à motif?
Un exemple simple pourrait être:
for i in someSubFolderCommonPathName*/*commonStringInFileName*!(stringNotToMatch); do stat $i; done
... mais il ne fonctionne pas.
Ok, si je simplifie furtherly cela, voici un exemple: je donne les résultats suivants:
[email protected]:~/a$ ls -R
.:
aPrettyBoy aPrettyGirl
./aPrettyBoy:
12cool21 12nice21 77nice77_ugly
./aPrettyGirl:
12cool21 12nice21 23nice23_ugly
Et puis j'essayer de faire afficher tous les fichiers contenant nice
en leur nom et non _ugly
:
[email protected]:~/a$ for i in *Pretty*/*nice*!(_ugly); do echo $i; done
aPrettyBoy/12nice21
aPrettyBoy/77nice77_ugly
aPrettyGirl/12nice21
aPrettyGirl/23nice23_ugly
Cela n'a pas fonctionné. Je vais inclure une étoile maintenant:
[email protected]:~/a$ for i in *Pretty*/*nice*!(*_ugly); do echo $i; done
aPrettyBoy/12nice21
aPrettyBoy/77nice77_ugly
aPrettyGirl/12nice21
aPrettyGirl/23nice23_ugly
Toujours pas fonctionnant. avec find
IcI:
[email protected]:~/a$ find . -path "*Pretty*/*nice*" ! -name "_ugly" -exec echo {} \;
./aPrettyBoy/12nice21
./aPrettyBoy/77nice77_ugly
./aPrettyGirl/23nice23_ugly
./aPrettyGirl/12nice21
Nada.
Dans mon cas, la partie avant et après 'nice' varie toujours. Les seules constantes sont «gentilles» quelque part au milieu et «_ugly» à la fin. J'ai essayé avec et sans '*' à l'intérieur des parenthèses, mais je reçois toujours ces fichiers non désirés ... –
@RickyRobinson: S'il vous plaît montrer un exemple concret. – choroba
OK, j'ai ajouté un exemple basé sur votre réponse. –