Passar os resultados do comando 'file' para encontrar o comando

0

Eu estava tentando passar pelo nível 4 do jogo de guerra Over the Wire - Bandit. O nível requer que você procure uma senha armazenada no único arquivo legível em uma pasta.

Agora, os arquivos são poucos, então o que eu fiz foi, para cada arquivo, verificar seu tipo com o comando file , e abrir o arquivo ASCII assim que eu o encontrasse. Eu queria saber se há uma maneira de passar file resultados para o comando find , para fazer essa pesquisa automaticamente.

(Parece uma questão muito trivial, mas ainda não consegui encontrar uma resposta).

Obrigado antecipadamente

    
por Giacomo 06.01.2018 / 15:25

1 resposta

0

grep -I ignora arquivos não-ASCII. Esta é uma opção não padrão, mas implementada por muitos grep s.

find thefolder -type f -exec grep -q -I . {} ';' -print

Isso listaria todos os arquivos no ou abaixo de thefolder que eram ASCII (de acordo com grep ) e não vazios (estamos pedindo ao grep para procurar um único caractere).

Com o GNU find , você também pode facilmente ignorar arquivos aos quais você não tem acesso de leitura:

find thefolder -type f -readable -exec grep -q -I . {} ';' -print

A única diferença aqui é que você evitaria alguns erros de "permissão negada".

Com a implementação de grep que pode fazer grep recursivo:

grep -rlI . thefolder

Usando file como você sugere:

find thefolder -type f -exec sh -c 'file "$1" | grep -qi text' sh {} ';' -print

Isso é muito mais lento que a primeira solução, mas funciona se você confia em file para fazer sua mágica corretamente.

Sempre ligeiramente mais rápido (só executa sh uma vez ou algumas vezes):

find thefolder -type f -exec sh -c '
    for pathname do
        if file "$pathname" | grep -qi text; then
            printf "%s\n" "$pathname"
        fi
    done' sh {} +
    
por 22.06.2018 / 13:28

Tags