Disons que j'ai un répertoire avec les fichiers a1, a2, a3, b1, b2, b3. Je veux seulement faire correspondre les fichiers commençant par a
mais ne contenant pas 3
. J'ai essayé ls -I "*3" *a*
mais ça revient a1 a2 a3
, même si je ne veux pas qu'elle corresponde a3
. Est-ce possible avec ls
?
12
do not list implied entries matching shell PATTERN
cependant, elle n'explique pas ce que l'on entend par implicite , mais je suppose qu'elle ne s'applique qu'aux fichiers quils
sont obtenus par des extensions globales - etls
ne développe pas lea*
, le shell le fait .Réponses:
Juste:
shopt -s extglob
active la globalisation étendue.a
correspond au débuta
!()
annule le match à l'intérieur du()
...*3*
qui est3
et n'importe quoi avant ou après.la source
set -s extglob
Les réponses existantes indiquent bien la meilleure façon de le faire avec des globes; J'inclurai cela parce que dans la plupart des cas,
find
c'est une meilleure option si vous voulez faire du script ou un traitement supplémentaire:Vous pouvez alimenter la réponse
xargs
pour des actions faciles ou unewhile read
boucle pour des choses plus compliquées.la source
Un moyen simple est
a*
3
La commande UNIX est
ls -1
affiche un fichier par ligne.grep
trouve normalement des lignes qui correspondent à un modèle mais avec-v
ce comportement est inversé, ie grep trouve une ligne qui ne correspond pas à ce modèle.la source
ls
n'est pas une idée de goob: mywiki.wooledge.org/ParsingLsAvec
zsh
, en utilisant l'~
opérateur glob :Avec
gnu
ls
vous pouvez utiliser deux--ignore
options:le 1er ignore tous les noms de fichiers qui ne commencent pas par
a
et le 2e ignore les noms de fichiers qui contiennent3
la source