Quero redirecionar a saída do find
comando para cat
comando, para poder imprimir os dados do arquivo fornecido.
Por exemplo, se a saída de find for /aFile/readme
, o gato deve ser interpretado como cat ./aFile/readme
. Como posso fazer isso instantaneamente?
Eu tenho que usar canos?
Eu tentei versões disso:
cat | find ./inhere -size 1033c 2> /dev/null
Mas acho que isso está completamente errado? Claro que tenho certeza de 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 direito: P
cat
a-n
opção me surpreende. Adoro ler perguntas aleatórias.Substituição de Comando
Outra opção é usar a Substituição de Comando . A quebra de um comando
$()
executará o comando e substituirá o comando por sua saída.se tornará
Isso é mais ou menos equivalente ao uso do estilo antigo de agrupar comandos com back ticks:
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 do comando pela saída padrão do comando, com as novas linhas finais excluídas. As novas linhas incorporadas não são excluídas, 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 acento grave do velho estilo de substituição é utilizado, barra invertida mantém o seu significado literal excepto quando seguido por
$
,`
, ou\
. A primeira cotação anterior não precedida por uma barra invertida finaliza a substituição do comando. Ao usar o$(command)
formulário, todos os caracteres entre parênteses formam o comando; nenhum é tratado especialmente.As substituições de comando podem estar aninhadas. Para aninhar ao usar o formulário com aspas anteriores, escape das aspas internas internas com barras invertidas.
Se a substituição aparecer entre aspas duplas, a divisão de palavras e a expansão do nome do arquivo não são executadas nos resultados.
Veja esta outra resposta para alguns bons exemplos de uso.
fonte
find
encontrar muitos arquivos, isso geraria um erro "lista de argumentos muito longa" ao tentar invocarcat
. Também teria problemas ao manipular nomes de arquivos que contenham caracteres de espaço em branco e possivelmente também nomes de arquivos que contenham caracteres ocultos de nome de arquivo.Isso imprimirá o nome e o conteúdo dos arquivos de texto (ascii) somente recursivamente.
Mais uma tentativa
fonte
Use pipe e xargs
Se falhar devido à falta de permissões, você poderá usar o sudo para garantir que tenha permissão para executar o comando find no diretório que está pesquisando.
fonte
/tmp/ /dev/urandom /pg_hba.conf
, isso permitirá que o root despeje todo o conteúdo de/dev/urandom
. Provavelmente, o pior pode ser feito dependendo do contexto.xargs
quase nunca deve ser usado sem,-0
se for o caso. Tambémsudo xargs
seria melhor quexargs sudo
. E/*
seria melhor como/
.find|xargs
sem-0
realmente deve ser banida), daí o voto negativo. A saída defind
sem-print0
não é pós-processável de forma confiável.-print0
não é padrão. Dito isso, o padrãosudo find / -name pg_hba.conf -exec cat {} +
também pode fazer com que você despeje o conteúdo/dev/urandom
(por exemplo, se alguém criou um link simbólico/tmp/pg_hba.conf
para ele e não há uma maneira portátil fácil de contornar isso que não tenha pelo menos uma condição de corrida).sudo
"apenas por precaução", devemos?sudo rm -rf /