在 find 命令中使用变量

在 find 命令中使用变量

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

相关内容