Eu só quero obter os arquivos do diretório atual e apenas produzir arquivos .mp4 .mp3 .exe nada mais. Então eu pensei que poderia fazer isso:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Mas não, como o primeiro grep produzirá apenas mp4, portanto os outros 2 grep não serão usados.
Alguma ideia? PS, executando este script no Slow Leopard.
shopt -s nullglob
e apenas consulte*.exe *.mp3 *.mp4
. Veja mywiki.wooledge.org/ParsingLsRespostas:
Por que não:
Não sei ao certo onde aprendi - mas estou usando isso.
fonte
ls: *.exe: No such file or directory
, por exemplo:ls *.{zip,tar.gz,tar} 2>/dev/null
Use expressões regulares com
find
:Se você estiver canalizando os nomes dos arquivos:
Isso protege os nomes de arquivos que contêm espaços ou novas linhas.
O OS X
find
suporta apenas alternância quando a-E
opção (aprimorada) é usada.fonte
find . -iregex '.*\(mp3\|mp4\|exe\)'
mysupermp3.jpg
considerar a adição da$
no final da regex e\\.
antes das extensõesegrep
- grep estendido - ajudará aquideve fazer o trabalho.
fonte
ls
para um terminal (ou com-C
opção) produz saída para várias colunas.ls
para um tubo (ou com-1
) possui saída de coluna única. (Compare a saída dels
comls | cat
).a maneira mais fácil é usar ls
fonte
ls
não tenha algum tipo de opção silenciosa.Apenas no caso: por que você não usa
find
?fonte
find . -name '*.mkv' -o -name '*.flv'
(adicionando quantas cláusulas -o, conforme necessário). Eu precisava.
indicar o diretório e a bandeira-name
não-iname
- estou no macOS 10.13.Não há necessidade de grep. Os curingas da Shell farão o truque.
Se você correu
os globs incomparáveis serão removidos por completo e não serão deixados na linha de comando sem expansão.
Se você deseja globbing sem distinção entre maiúsculas e minúsculas (então * .mp3 corresponderá a foo.MP3):
fonte
-R
opção de listar arquivos correspondentes em subdiretórios, mas a opção parece não ter nenhum efeito e ainda recebo apenas os resultados do diretório atual.Caso você ainda esteja procurando uma solução alternativa:
Sinta-se à vontade para adicionar mais sinalizadores -e, se necessário.
fonte
Para usuários OSX :
Se você usar
ls *.{mp3,exe,mp4}
, ocorrerá um erro se uma dessas extensões não tiver resultados.O uso
ls *.(mp3|exe|mp4)
retornará todos os arquivos correspondentes a essas extensões, mesmo que uma delas tenha 0 resultados .fonte
ls *.@(mp3|exe|mp4)
. Você precisashopt -s extglob
que isso funcione. By the way,ls
é inútil também, você poderia apenas fazerprintf '%s\n' *.@(mp3|exe|mp4)
.fonte
mdfind
produz as melhores / pesquisas mais rápidas NUNCA!mdfind -name querystring | grep "\.h$"
localiza todos os cabeçalhos com a consulta no título do arquivo. pronto.ls -R | findstr ".mp3"
ls -R
=> lista subdiretórios recursivamentefonte
Aqui está um exemplo que funcionou para mim.
fonte