No linux, tenho um arquivo que contém, entre outros, muitos arquivos e diretórios contendo literalmente "scrap". Posso vê-los digitando ls *scrap*
sem problemas. No entanto, isso também retorna diretórios contendo a "sucata" literal e eu gostaria de excluí-los.
Eu tentei brincar com ls | grep ".*scrap.*"
ou ls | grep scrap
, mas isso retorna apenas os diretórios (não os arquivos normais).
Porque isto é assim?
A próxima etapa será (assim que o representante retornar a saída correta) remover os diretórios dessa saída. Sugestões de como fazer isso também são bem-vindas!
Na verdade, para eventualmente listar todos os arquivos regulares no diretório atual (no 1º nível) que possuem
scrap
em seus nomes, você não precisa dels
+grep
.Com o bom e velho
find
comando:Você se depara com problemas
ls
quandogrep
os nomes dos arquivos contêm espaços ou (pior) novas linhas. Mas com nomes de arquivos seguros, você pode fazer isso:Mas geralmente você deve usar a
find
abordagem.Para os nomes dos arquivos fora do diretório no diretório atual que contém
scrap
, emzsh
:Observe que em
ls *scrap*
(ou o mais corretols -- *scrap*
), se algum dos*scrap*
arquivos for do tipo diretório ,ls
listará seu conteúdo (com umthat-scrap-dir:
cabeçalho, a menos que*scrap*
expanda em um e apenas um arquivo que seja esse diretório).Se você quiser que para arquivos do tipo diretório ,
ls
apenas imprima seu nome como para outros tipos de arquivos, você precisa adicionar a-d
opção:Mas quase não faz sentido usar
ls
como todo o trabalho de encontrar arquivos por nome e tipo foi feito pelo shell no momento em quels
é invocado, você também pode usar o builtinprint
ouprintf
do seu shell.Parece que esta é a resposta que você está procurando. A postagem fala sobre a expansão glob sendo a razão pela qual apenas algumas coisas estão aparecendo.