Quiero enumerar todos los archivos en un directorio que comienzan con 'abc' y terminan con '.zip'
Estoy tratando de utilizar ls.
El directorio tiene muchos archivos zip que comienzan con abc<date>y xvz<date>. Solo quiero obtener la lista deabc<date>.zip

ls -1 | grep "abc$(your_date).zip"?Respuestas:
lsno 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
printfpara imprimir:También puede pasarlo
ls -lpara mostrar los atributos de esos archivos:(lo necesitamos
-dporque si alguno de esos archivos es de tipo directorio ,lsenumeraría su contenido de lo contrario).O para
unzipextraerlos si solounzippudiera extraer más de un archivo a la vez. Desafortunadamente no lo hace, por lo que necesitaría usarxargs -n1o unforbucle:O:
Pero, de hecho, al
unzipser más como un puerto de un comando de MS-DOS, enunzipsí mismo trataría su argumento como un problema. En otras palabras,unzip 'abc*.zip'no descomprimirá el archivo llamadoabc*.zip(un nombre de archivo perfectamente válido en Unix, no en los sistemas operativos de Microsoft), sino los archivos que coinciden con elabc*.zippatrón, por lo que realmente querrá:(En realidad nuestra
xargsyforenfoque anterior sería un error, porque si hay un archivo llamadoabc*.zip, por ejemplo,unzipsería tratarlo como un patrón! Verbsdtaruna manera más unixy para extraerziplos 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:O:
si solo desea que la
abcparte no distinga entre mayúsculas y minúsculas.ksh93:o:
con
bash.(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:mismo comentario que el
bashanterior.fuente
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).
Este es probablemente el más universal. Las citas deben estar ahí. Con algunas
findimplementaciones, también puede usar en-inamelugar de-nameuna búsqueda sin distinción entre mayúsculas y minúsculas (aBc<date>.ZIPtambién coincidiría).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. Usogrep -ipara búsqueda sin distinción entre mayúsculas y minúsculasfuente
execve()llamada al sistema.findtambién buscará esos archivos en subdirectorios. Usefind . ! -name . -prune -name 'abc*.zip' -printofind . -maxdepth 1 -name 'abc*.zip'si susfindsoportes son-maxdepthsimilares a GNU o BSD ofind . -depth 1 -name 'abc*.zip'si esfindcompatible-depth <n>con algunos BSD para restringirlos al directorio actual.$ ls ../*.afuncionó para mí (lista de archivos en directorio principal).Intente
ls abc*.zipreducir los resultados a aquellos que coincidan con sus criterios para una cadena inicial de abc y un final de .zip. El asterisco se expandirá para que coincida con esos resultados sin incluir los caracteres iniciales xvz.fuente
Debe especificar el directorio donde
lsbuscará en un ejemplofunciona para mí, pero obviamente no admite la búsqueda por patrón
fuente
abcy terminar con.zip.