Digamos que tengo un directorio con archivos a1, a2, a3, b1, b2, b3. Solo quiero hacer coincidir los archivos que comienzan con a
pero no contienen 3
. Lo intenté ls -I "*3" *a*
pero vuelve a1 a2 a3
, aunque no quiero que coincida a3
. ¿Es esto posible con ls
?
12
do not list implied entries matching shell PATTERN
sin embargo, no explica qué se entiende por implícito , pero supongo que solo se aplica a los archivos que sels
obtienen mediante expansiones globales, yls
no expande ela*
, el shell hace eso .Respuestas:
Sólo:
shopt -s extglob
activa el globbing extendido.a
coincide con el inicioa
!()
niega el partido dentro del()
...*3*
que es3
y cualquier cosa antes o después.fuente
set -s extglob
Las respuestas existentes indican bien la mejor manera de hacer esto con globs; Incluiré esto porque en la mayoría de los casos,
find
es una mejor opción si desea realizar secuencias de comandos o procesamiento adicional:Puede alimentar la respuesta
xargs
para acciones fáciles, o unwhile read
bucle para cosas más complicadas.fuente
Una manera fácil es
a*
3
El comando UNIX es
ls -1
muestra un archivo por línea.grep
normalmente encuentra líneas que coinciden con un patrón pero con-v
este comportamiento se invierte, es decir, grep encuentra líneas que no coinciden con ese patrón.fuente
ls
no es una idea tonta: mywiki.wooledge.org/ParsingLsCon
zsh
, utilizando el~
operador global :Con
gnu
ls
usted podría usar dos--ignore
opciones:el primero ignora todos los nombres de archivo que no comienzan
a
y el segundo ignora los nombres de archivo que contienen3
fuente