Como usar o comando “cat” na saída do comando “find”?

5

Eu quero redirecionar a saída do comando find para o comando cat para que eu possa imprimir os dados do arquivo fornecido.

Por exemplo, se a saída de find for /aFile/readme , o cat deve ser interpretado como cat ./aFile/readme . Como posso fazer isso instantaneamente?

Eu tenho que usar canos?

Eu tentei versões deste:

cat | find ./inhere -size 1033c 2> /dev/null

Mas eu acho que isso é completamente errado? Claro que tenho certeza que a saída é apenas um arquivo e não vários arquivos.

Então, como posso fazer isso? Pesquisei no Google e não consegui encontrar uma solução, provavelmente porque não pesquisei corretamente: P

    
por Eksapsy 26.06.2016 / 21:29

3 respostas

10

Você pode fazer isso com find usando a ação -exec :

find /location -size 1033c -exec cat {} +

{} será expandido para os arquivos encontrados e + nos permitirá ler tantos argumentos quanto possível por invocação de cat , já que o cat pode receber vários argumentos.

Se o seu find não tiver a extensão + ou você quiser ler os arquivos um por um:

find /location -size 1033c -exec cat {} \;

Se você quiser usar qualquer opção de cat , faça:

find /location -size 1033c -exec cat -n {} +
find /location -size 1033c -exec cat -n {} \;

Aqui estou usando a opção -n para obter os números de linha.

    
por 26.06.2016 / 21:30
0

Substituição de Comando

Outra opção é usar Substituição de Comando . Envolver um comando em $() executará o comando e substituirá o comando por sua saída.

cat $(find ./inhere -size 1033c 2> /dev/null)

se tornará

cat ./inhere/file1 .inhere/file3

Isso é mais ou menos equivalente a usar o estilo antigo de agrupar comandos com retrocessos:

cat 'find ./inhere -size 1033c 2> /dev/null'

Mais detalhes dos documentos vinculados acima

O Bash executa a expansão executando o comando em um ambiente de subshell e substituindo a substituição de comando pela saída padrão do comando, com todas as novas linhas à direita excluídas. As novas linhas incorporadas não são eliminadas, mas podem ser removidas durante a divisão de palavras. A substituição do comando $(cat file) pode ser substituída pelo equivalente mas mais rápido $(< file) .

Quando a forma de substituição do estilo antigo de substituição é usada, a contrabarra retém seu significado literal, exceto quando seguida por $ , ' ou \ . O primeiro backquote não precedido por uma barra invertida termina a substituição do comando. Ao usar o formulário $(command) , todos os caracteres entre parênteses compõem o comando; nenhum é tratado especialmente.

As substituições de comandos podem ser aninhadas. Para aninhar ao usar o formulário com as costas, escape das contra-formas internas com barras invertidas.

Se a substituição aparecer entre aspas duplas, a divisão de palavras e a expansão do nome de arquivo não serão realizadas nos resultados.

Veja esta outra resposta para alguns bons exemplos de uso.

    
por 02.08.2018 / 16:49
-1

Use pipe e xargs

find /* -name pg_hba.conf | xargs cat

Se falhar por causa da falta de permissões, você pode usar o sudo para ter certeza de que tem permissão para executar o comando find no diretório que está pesquisando.

 sudo find /* -name pg_hba.conf | xargs sudo cat
    
por 27.01.2017 / 01:21

Tags