Lista todos os arquivos terminados com várias extensões de arquivo?

4

Se eu quiser arquivos que terminem com .fas , sei que posso fazer o seguinte com o comando ls :

ls -l /users/jenna/bio/*.fas

e isso lista todos os arquivos terminados em .fas . Mas como posso obter arquivos que terminem com .fas ou .pep ?

ls -l /users/jenna/bio/(*.fas | *.pep) parece não funcionar? Eu sei que pode haver outros comandos que podem fazer isso, mas existe uma maneira de fazê-lo funcionar com ls ?

Obrigado por qualquer ajuda!

    
por Jenna Maiz 30.03.2016 / 20:41

3 respostas

5

Use isto: ls -l /users/jenna/bio/*.{fas,pep}

Ou isto: find /users/jenna/bio -iname '*.pep' -or -iname '*.fas'

    
por 30.03.2016 / 20:43
3

A coisa com maior probabilidade de trabalhar fora da caixa é expansão de chave . Funciona em bash, zsh e ksh.

ls -l /users/jenna/bio/*.{fas,pep}

(sem espaços em qualquer lugar ao redor das chaves.)

No bash e ksh, isso exibe um erro se uma das extensões não for correspondida, mas lista os arquivos correspondentes à outra extensão. A razão para isso é que a expansão de contraventamento não é um recurso de correspondência de caractere curinga, mas uma substituição de texto: *.{fas,pep} é convertido em *.fas *.pep antes de o shell começar a procurar arquivos que correspondam aos padrões. Em zsh, você receberá um erro e o comando não será executado, mas há uma maneira melhor: um “ou” glob pattern . Este não irá cometer erros a menos que nenhuma das extensões coincida.

ls -l /users/jenna/bio/*.(fas|pep)

Ou os padrões também estão disponíveis com uma sintaxe diferente : @(…|…) ; no bash, essa sintaxe precisa ser ativada com shopt -s extglob e, em zsh, essa sintaxe precisa ser ativada com setopt ksh_glob .

ls -l /users/jenna/bio/*.@(fas|pep)

(Alguns desses comportamentos podem ser configurados. Todas as minhas instruções se aplicam à configuração padrão dos shells, a menos que explicitamente especificado.)

    
por 31.03.2016 / 02:35
1

Quando você deseja digitalizar recursivamente sem os erros irritantes normalmente obtidos de find ou ls (como: " Permissão negada ", " Não é um diretório ") que pode travar scripts ou xargs comandos, também o comando tree não foi mencionado em lugar algum aqui:

tree -fai / | grep -e ".fas$" -e ".pep$"

acima eu usei a raiz / , mas pode ser qualquer caminho:

tree -fai /users/jenna/bio/ |  grep -e ".fas$" -e ".pep$""

BTW

    
por 08.02.2017 / 02:15