Combinando vários padrões com ls

Combinando vários padrões com ls

Gostaria de obter uma lista de logs de falhas no diretório atual para uso em um script externo, os logs são determinados com o padrão FAIL no nome do arquivo, então estou usando um FAIL* para alimentar meus arquivos de script para abrir e processo. No entanto, para cada arquivo FAIL existem dois tipos, um arquivo compactado e um descompactado. Eu só quero abrir o arquivo descompactado.

É possível encontrar em cadeia FAIL* mas não se *.gz/bz2/whatever existir?

Responder1

Você pode testar a presença de uma regex para essas extensões:

for file in *FAIL*; do [[ ! $file =~ .(bz2|gz) ]] && printf "%s\n" "$file"; done

Inserir aviso obrigatório sobrenão analisandols...

Responder2

Se você usar o findcomando, poderá omitir os arquivos que terminam com a extensão .gzassim:

$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL.gz

$ find . -name "*FAIL*" ! -name "*.gz"
./FAIL

Você também pode filtrar lsa saída assim:

$ ls *FAIL* | grep -v '.gz'
FAIL

Mas geralmente é aconselhável não analisar lsa saída, pois ela não está estruturada de forma que seja propícia para isso.

informação relacionada