mount |awk '{print $3}'
--> 挂载点列表
find "list of mount points" -name "aaa" -print
如何将上一行的结果重定向到 find 命令作为搜索目录?
我想用一行完成它:
mount |awk '{print $3}' | find "converting pipe result to a variable as directory" -name "aaa" -print
有可能让它以这种方式工作吗?
答案1
有可能让它以这种方式工作吗?
是的,与xargs
:
mount |awk '{print $3}' | xargs -I {} find {} -name "aaa" -print
-P n
如果您添加后xargs
以实现最大n
并发进程(这是 GNU 扩展),您甚至可以让它并行搜索您的硬盘驱动器。
答案2
您正在寻找命令替换:将命令的输出替换为命令行。
find $(mount |awk '{print $3}') -name "aaa" -print
仅当挂载点不包含任何空格或*?\[
.对于挂载点来说,此限制很少会出现问题(但请确保您的挂载点没有带有空格字符 - 该awk
命令无论如何都不会正确解析它们)。
您需要告诉find
不要遍历挂载点,否则find /
已经遍历了整个系统。通过-xdev
选项。
find $(mount |awk '{print $3}') -xdev -name "aaa" -print
请注意,您可能不应该find
在所有已安装的文件系统上运行,因为内部系统使用的文件系统可能非常大,并且包含许多您无权读取的文件(导致虚假错误消息)。不要从 获取文件系统列表mount
,而是从 获取df
,这会省略其中一些文件系统。
find $(df -P |awk 'NR != 1 {print $6}') -xdev -name "aaa" -print