ls
não faz 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, tem 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, esse padrão glob seria abc*.zip
( *
sendo um curinga que representa qualquer número de caracteres ).
Você passaria para qualquer comando que você gostasse, como printf
para impressão:
printf '%s\n' abc*.zip
Você também pode passá-lo para ls -l
para exibir os atributos desses arquivos:
ls -ld abc*.zip
(precisamos de -d
, porque se algum desses arquivos for do tipo diretório , ls
listará seu conteúdo de outra forma).
Ou para unzip
extraí-los se apenas unzip
puder extrair mais de um arquivo por vez. Infelizmente isso não acontece, então você precisaria usar xargs -n1
ou for
loop:
printf '%sfor file in abc*.zip; do unzip "$file"; done
' abc*.zip | xargs -r0n1 unzip
Ou:
unzip 'abc*.zip'
Mas, na verdade, unzip
é mais como uma porta de um comando do MS-DOS, unzip
trataria seu argumento como glob. 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 correspondentes ao padrão abc*.zip
, então você realmente deseja: / p>
setopt extendedglob
ls -ld (#i)abc*.zip
(Na verdade, nossa abordagem xargs
e for
acima estaria errada, porque se houver um arquivo chamado abc*.zip
, por exemplo, unzip
o trataria como um padrão! Consulte bsdtar
para um mais unixy maneira de extrair zip
arquivos)
Para correspondência insensível a maiúsculas e minúsculas, você usaria [aA][bB][cC]*.[zZ][iI][pP]
portably. Algumas shells estenderam os operadores de globbing para uma correspondência insensível a maiúsculas e minúsculas:
-
zsh
:ls -ld ((#i)abc)*.zip
Ou:
ls -ld ~(i)abc*.zip
se você quiser que a parte
abc
seja insensível a maiúsculas e minúsculas. -
ksh93
:ls -ld ~(i:abc)*.zip
ou:
shopt -s nocaseglob ls -ld abc*.zip
-
com
bash
.set +o case-glob ls -ld abc*.zip
(não é possível ter apenas partes dos globs sensíveis a maiúsculas e minúsculas além da sintaxe portátil).
-
com
yash
:printf '%s\n' abc*.zip
mesma observação que para
bash
acima.