为什么这个使用管道的命令不起作用?

Leo*_*mos 1 command-line bash

为什么find . | cat有效(打印所有文件名)但find . | file -i不适用于显示所有文件 mime 类型?

它不应该工作,因为有来自的输出find .和来自的输入file -i吗?

(对不起,如果这是一个愚蠢的问题,我是一个使用 bash 的初学者,我找不到另一个可以向我解释这一点的问题)

gle*_*man 5

使用管道,右侧的命令读取其 stdin 通道上的数据。该file命令要求文件是命令行参数,而不是标准输入上的数据。

这正是该xargs命令的用途:从标准输入读取,并将数据作为命令行参数提供:

find . | xargs file -i
Run Code Online (Sandbox Code Playgroud)

或者,使用以下-f选项file

find . | file -i -f -
Run Code Online (Sandbox Code Playgroud)

阅读手册页以获取更多详细信息。