O Awk não pesquisa arquivos em sub-diretórios?

2

Estou tentando usar o awk para pesquisar vários arquivos em uma string específica, mas ele retorna

'Example' is a directory: skipped.

Como posso usar o awk para pesquisar em todos os subdiretórios e arquivos?

Exemplo de uso,

awk -F: '$3 ~ /example/' * > C:/out.txt
    
por questionaires 24.08.2018 / 00:35

2 respostas

3

Este é um problema com a globalização de casca e não awk . Para globar recursivamente, você precisa ativar a opção bash globstar .

shopt -s globstar

globstar

If set, the pattern ** used in a pathname expansion context will match all files and zero or more directories and subdirectories. If the pattern is followed by a /, only directories and subdirectories match.

Então você seria capaz de:

awk -F: '$3 ~ /example/' ** > C:/out.txt

Observe que você ainda receberá o erro sobre o diretório em si estar sendo ignorado, mas também irá recorrer a ele. Você pode esconder erros redirecionando stderr para / dev / null

awk -F: '$3 ~ /example/' ** > C:/out.txt 2>/dev/null
    
por 24.08.2018 / 00:47
2

Sugiro que você use find em combinação com awk :

find -type f -exec awk -F: '$3 ~ /example/' {} > c:/out.txt \;

Observação: find não é um substituto simples para * , conforme corretamente apontado nos comentários abaixo. Você pode querer sintonizar seus parâmetros find para retornar exatamente o conjunto de arquivos que está procurando.

Observação: apenas um > ainda é necessário (em oposição a >> ), pois é a saída de find que é redirecionada.

Nota: se, ao que parece, você está usando cmder , você deve ter o cuidado de chamar o GNU find e não o find.exe do Windows. Veja aqui para encontrar maneiras de superar essa ambiguidade.

    
por 24.08.2018 / 15:54

Tags