Respostas:
lsnão faz a correspondência de padrões nos nomes dos arquivos. Apenas lista o conteúdo dos diretórios e os arquivos que estão sendo fornecidos como argumentos.
Seu shell, por outro lado, possui um recurso chamado globbing ou geração de nome de arquivo que expande um padrão em uma lista de arquivos correspondentes a esse padrão.
Aqui estaria esse padrão glob abc*.zip( *sendo um curinga que representa qualquer número de caracteres ).
Você o passaria para qualquer comando que desejar, como printfpara impressão:
printf '%s\n' abc*.zip
Você também pode passá-lo para ls -lpara exibir os atributos desses arquivos:
ls -ld abc*.zip
(precisamos, -dporque se algum desses arquivos for do tipo diretório , lslistará seu conteúdo de outra forma).
Ou para unzipextraí-los, se ao menos fosse unzippossível extrair mais de um arquivo por vez. Infelizmente, não, então você precisaria usar xargs -n1um forloop:
printf '%s\0' abc*.zip | xargs -r0n1 unzip
Ou:
for file in abc*.zip; do unzip "$file"; done
Mas, de fato, unzipsendo mais como uma porta de um comando do MS-DOS, unzipele próprio trataria seu argumento como um globo. Em outras palavras, unzip 'abc*.zip'não descompactará o arquivo chamado abc*.zip(um nome de arquivo perfeitamente válido no Unix, não nos sistemas operacionais da Microsoft), mas os arquivos que correspondem ao abc*.zippadrão, portanto, você realmente deseja:
unzip 'abc*.zip'
(Na verdade, nossa xargse a forabordagem acima estariam erradas, porque se houver um arquivo chamado, abc*.zippor exemplo, unzipo trataria como um padrão! Veja bsdtaruma maneira mais unix de extrair ziparquivos)
Para correspondência sem distinção entre maiúsculas e minúsculas, você usaria [aA][bB][cC]*.[zZ][iI][pP]portably. Alguns shells têm operadores de globbing estendidos para correspondência sem distinção entre maiúsculas e minúsculas:
zsh:
setopt extendedglob
ls -ld (#i)abc*.zip
Ou:
ls -ld ((#i)abc)*.zip
se você deseja que a abcpeça não diferencie maiúsculas de minúsculas.
ksh93:
ls -ld ~(i)abc*.zip
ou:
ls -ld ~(i:abc)*.zip
com bash.
shopt -s nocaseglob
ls -ld abc*.zip
(nenhuma maneira de ter apenas partes dos globs sensíveis a maiúsculas e minúsculas além de usar a sintaxe portátil).
com yash:
set +o case-glob
ls -ld abc*.zip
mesma observação que bashacima.
ls abc*.zip
No entanto, isso falhará se houver muitos arquivos (há um limite para a expansão do shell em termos de quantos argumentos ele pode ser expandido).
find . -name "abc*.zip"
Este é provavelmente o mais universal. As aspas devem estar lá. Com algumas findimplementações, você também pode usar em -inamevez de fazer -namepesquisa sem distinção entre maiúsculas e minúsculas ( aBc<date>.ZIPtambém corresponderia).
ls | grep -x "abc.*\.zip"
Mente o .*e \.desde os usos grep filtro é expressão regular que é diferente do carácter universal notação os usos escudo para expansão. Use grep -ipara pesquisa que não diferencia maiúsculas de minúsculas.
execve()chamada do sistema.
findos arquivos também serão procurados em subdiretórios. Use find . ! -name . -prune -name 'abc*.zip' -printou find . -maxdepth 1 -name 'abc*.zip'se o seu findsuporte é -maxdepthsemelhante ao GNU ou BSD ou find . -depth 1 -name 'abc*.zip'se o seu findsuporte é -depth <n>semelhante em alguns BSDs para restringir ao diretório atual.
$ ls ../*.afuncionou para mim (listar arquivos no diretório pai).
Você deve especificar o diretório em lsque procurará em um exemplo
ls -la ~/file*.*
ls -la ./file*.*
funciona para mim, mas obviamente não suporta pesquisa por padrão
abce terminar com .zip.
ls -1 | grep "abc$(your_date).zip"?