Liste des fichiers ne correspondant pas à un modèle?
Voici comment on pourrait la liste de tous les fichiers qui correspondent à un motif dans bash:
ls *.jar
Comment lister le complément d'un modèle? c'est à dire tous les fichiers qui ne correspond pas *.pot?
- ce ne devrait probablement pas être étiquetés regex, * est une coquille d'expansion générique, et n'est pas une expression régulière *, qui est le "zéro ou plusieurs quantificateur".
- Bon point, même si je suis d'apprentissage que l'utilisation de regex est probablement plus pratique pour se les matchs que vous attendez.
Vous devez vous connecter pour publier un commentaire.
par exemple.
man grep
.ls
, je vous remercie.Utilisation egrep-style étendu pattern matching.
Ce qui est disponible à partir de bash-2.02-alpha1.
Doit d'abord être activée avec
De bash-4.1-alpha il y a une option de configuration pour activer cette fonction par défaut.
Peu connu bash extension de la règle:
POSIX définit non-correspondance support des expressions, nous pouvons donc laisser la coquille d'élargir les noms de fichier pour nous.
Cela a quelques bizarreries, mais au moins il est compatible avec sur toute la shell unix.
Avec une version appropriée de
find
, vous pourriez faire quelque chose comme cela, mais c'est un peu exagéré:find
trouve des fichiers. Le.
argument spécifie que vous voulez lancer la recherche à partir.
, c'est à dire le répertoire courant.-maxdepth 1
dit elle, vous ne voulez la recherche d'un niveau de profondeur, c'est à dire le répertoire courant.! -name '*.jar'
recherche tous les fichiers qui ne pas correspondent à l'expression régulière*.jar
.Comme je l'ai dit, c'est un peu overkill pour cette application, mais si vous supprimez le
-maxdepth 1
, vous pouvez ensuite récursivement la recherche de tous les fichiers jar ou qu'avez-vous facilement.Une solution serait
ls -1|grep -v '\.jar$'
ls
, je vous remercie.ls
ou à l'aide degoto
. Parfois, les solutions les plus efficaces.find . -print0 | grep -z '\.jar$'
fonctionne mieux, même si vous ne souhaitez pas utiliser--ignore
ou Bash est prolongée d'expansion. Cela dit, la plupart des gens ne veulent pas lire tout l'article pour comprendre une règle ou ce qu'ils doit faire, et vous pouvez l'adapter à une explication simple et recommandation comme “ça ne fonctionne pas dans les cas de bord; utilisationfind -print0
etgrep -z
au lieu de” dans un commentaire.Et si vous souhaitez exclure de plus qu'une extension de fichier, de les séparer avec un tuyau
|
, commels test/!(*.jar|*.bar)
. Faites un essai:Regarder les autres réponses que vous pourriez avoir besoin pour
shopt -s extglob
premier.!(*.[bj]ar)
à la place.Si votre
ls
le supporte (man ls
) utiliser le--hide=<PATTERN>
option. Dans votre cas:Pas besoin d'analyser les données en sortie de
ls
(parce que c'est très mauvais), et s'adapte pour ne pas montrer plusieurs types de fichiers. À un certain moment, j'avais besoin de voir ce que les non-source, non-objet, non libtool fichiers générés ont été dans un (encombré) répertoire:A travaillé comme un charme.
Une autre approche peut être à l'aide de
ls -I
drapeau (Ignorer le motif).