Use isto:
ls -l /users/jenna/bio/*.{fas,pep}
Ou isto:
find /users/jenna/bio -iname '*.pep' -or -iname '*.fas'
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!
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.)
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
Tags command-line directory ls files