Comando ls | grep mostrando apenas diretórios (quando também deve mostrar arquivos)

1

No linux, eu tenho um arquivo contém, entre outros, muitos arquivos e diretórios contendo o literal "scrap". Eu posso vê-los digitando ls *scrap* sem problema. No entanto, isso também retorna diretórios contendo o "scrap" 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).

Por que isso acontece?

O próximo passo será (uma vez que o representante retorne a saída correta) para remover os diretórios daquela saída. Sugestões sobre como fazer isso também são bem-vindas!

    
por jim basquiat 25.11.2017 / 21:59

2 respostas

3

Na verdade, para listar todos os arquivos regulares no diretório atual (no 1º nível) que têm scrap em seus nomes, você não precisa de ls + grep .

Com o bom e velho comando find :

find . -maxdepth 1 -type f -name "*scrap*" -ls
    
por 25.11.2017 / 22:06
1

Você tem problemas com ls e grep quando os nomes de arquivos contêm espaços ou (pior) novas linhas. Mas com nomes de arquivos seguros, você pode fazer isso:

ls -l | grep -oP '^-.* \K.*$'
ls -l | sed -n '/^-/s/^.* //p'

Mas normalmente você deve usar a abordagem find .

    
por 25.11.2017 / 22:59

Tags