por que esse comando usando pipe não funciona?

por que esse comando usando pipe não funciona?

Por que find . | catfunciona (imprimindo todos os nomes de arquivos), mas find . | file -inão funciona para mostrar o tipo MIME de todos os arquivos?

não deveria funcionar, já que há uma saída find .e uma entrada de file -i?

(Desculpe se esta é uma pergunta estúpida, sou iniciante no bash e não consegui encontrar outra pergunta que pudesse me explicar isso)

Responder1

Com um pipe, o comando do lado direito lê os dados em seu canal stdin. O filecomando requer que os arquivos sejam argumentos de linha de comando, não dados em stdin.

É exatamente para isso que xargsserve o comando: ler stdin e fornecer os dados como argumentos de linha de comando:

find . | xargs file -i

Ou, use a -fopção para file:

find . | file -i -f -

Leia as páginas de manual para obter mais detalhes.

informação relacionada