我正在尝试执行此操作:
locate pg_type.h | cat
Run Code Online (Sandbox Code Playgroud)
但是这个命令与 locate pg_type.h 没有什么不同
我应该改变什么?我想在cat pg_type.h
任何地方表演pg_type.h
。
Sté*_*las 13
locate -e0 '*/pg_type.h' | xargs -r0 cat
Run Code Online (Sandbox Code Playgroud)
locate pg_type.h
会找到pg_type.h
路径中的所有文件(例如,如果有一个rpg_type.horn
目录,您最终会显示其中的所有文件)。
没有-0
的输出locate
无法进行后处理,因为文件由换行符分隔,而换行符是文件名中完全有效的字符。
cat
没有参数将它从标准输入读取的内容写入标准输出,因此locate | cat
与 相同locate
,cat
只会传递输出locate
。您需要的是将文件列表作为参数传递给cat
.
这xargs
就是通常的用途:将数据流转换为参数列表。-r
就是cat
没有输入就不要调用。没有-0
(这-r
不是标准的,但在许多实现中都可以找到,至少那些 xargs 对任何东西都有用的实现),xargs
只会在其输入中查找单词以转换为参数,其中单词以空格分隔,反斜杠、单引号和双引号可用于转义这些分隔符,因此通常不是locate
用于显示文件名的格式。
这就是为什么我们-0
对两者都使用选项locate
,xargs
它使用 NUL 字符(这是文件路径中唯一不允许的字符)来分隔文件名。
另请注意,这locate
不是标准命令,并且存在大量具有不同版本和不同选项和行为的不同实现。上面的代码至少适用于相对较新的 GNU 版本locate
和mlocate
至少在基于 Linux 的操作系统上最常见的实现。
您的命令在标准输入上传递locate
to的输出cat
。那不是你想要的。什么,你想要的是的输出传递locate
到cat
作为参数。
我相信这样做的方法是xargs
:
locate pg_type.h | xargs cat
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18521 次 |
最近记录: |