Respuestas:
ls
no hace coincidencia de patrones en los nombres de archivo. Simplemente enumera el contenido de los directorios y los archivos que se le están dando como argumentos.
Su shell, por otro lado, tiene una característica llamada globalización o generación de nombre de archivo que expande un patrón en una lista de archivos que coinciden con ese patrón.
Aquí ese patrón global sería abc*.zip
( *
siendo un comodín que representa cualquier número de caracteres ).
Lo pasaría a cualquier comando que desee, como printf
para imprimir:
printf '%s\n' abc*.zip
También puede pasarlo ls -l
para mostrar los atributos de esos archivos:
ls -ld abc*.zip
(lo necesitamos -d
porque si alguno de esos archivos es de tipo directorio , ls
enumeraría su contenido de lo contrario).
O para unzip
extraerlos si solo unzip
pudiera extraer más de un archivo a la vez. Desafortunadamente no lo hace, por lo que necesitaría usar xargs -n1
o un for
bucle:
printf '%s\0' abc*.zip | xargs -r0n1 unzip
O:
for file in abc*.zip; do unzip "$file"; done
Pero, de hecho, al unzip
ser más como un puerto de un comando de MS-DOS, en unzip
sí mismo trataría su argumento como un problema. En otras palabras, unzip 'abc*.zip'
no descomprimirá el archivo llamado abc*.zip
(un nombre de archivo perfectamente válido en Unix, no en los sistemas operativos de Microsoft), sino los archivos que coinciden con el abc*.zip
patrón, por lo que realmente querrá:
unzip 'abc*.zip'
(En realidad nuestra xargs
y for
enfoque anterior sería un error, porque si hay un archivo llamado abc*.zip
, por ejemplo, unzip
sería tratarlo como un patrón! Ver bsdtar
una manera más unixy para extraer zip
los archivos)
Para una coincidencia que no [aA][bB][cC]*.[zZ][iI][pP]
distinga entre mayúsculas y minúsculas, usaría de forma portátil. Algunos proyectiles tienen operadores de globo extendido para la coincidencia entre mayúsculas y minúsculas:
zsh
:
setopt extendedglob
ls -ld (#i)abc*.zip
O:
ls -ld ((#i)abc)*.zip
si solo desea que la abc
parte no distinga entre mayúsculas y minúsculas.
ksh93
:
ls -ld ~(i)abc*.zip
o:
ls -ld ~(i:abc)*.zip
con bash
.
shopt -s nocaseglob
ls -ld abc*.zip
(no hay forma de tener solo partes de los globos sensibles a mayúsculas y minúsculas que no sea mediante el uso de la sintaxis portátil).
con yash
:
set +o case-glob
ls -ld abc*.zip
mismo comentario que el bash
anterior.
ls abc*.zip
Sin embargo, esto fallará si hay demasiados archivos (hay un límite para la expansión de shell en términos de cuántos argumentos puede expandirse).
find . -name "abc*.zip"
Este es probablemente el más universal. Las citas deben estar ahí. Con algunas find
implementaciones, también puede usar en -iname
lugar de -name
una búsqueda sin distinción entre mayúsculas y minúsculas ( aBc<date>.ZIP
también coincidiría).
ls | grep -x "abc.*\.zip"
Tenga en cuenta que .*
y \.
dado que el filtro grep usa es regex, que es diferente de la notación comodín que el shell usa para la expansión. Uso grep -i
para búsqueda sin distinción entre mayúsculas y minúsculas
execve()
llamada al sistema.
find
también buscará esos archivos en subdirectorios. Use find . ! -name . -prune -name 'abc*.zip' -print
o find . -maxdepth 1 -name 'abc*.zip'
si sus find
soportes son -maxdepth
similares a GNU o BSD o find . -depth 1 -name 'abc*.zip'
si es find
compatible -depth <n>
con algunos BSD para restringirlos al directorio actual.
$ ls ../*.a
funcionó para mí (lista de archivos en directorio principal).
Debe especificar el directorio donde ls
buscará en un ejemplo
ls -la ~/file*.*
ls -la ./file*.*
funciona para mí, pero obviamente no admite la búsqueda por patrón
abc
y terminar con .zip
.
ls -1 | grep "abc$(your_date).zip"
?