我经常需要在不同的系统上搜索文件,而不知道我要查找的文件位于哪个系统上。
是否可以在多个系统上并行使用 mlocate 进行搜索?通过直接在多个mlocate.db
文件中搜索还是使用一些 bash magic?
答案1
使用 bash&
并行运行多个“ssh”命令,然后wait
不带参数等待所有作业完成。例如,假设您有$query
和 中的一个空格分隔的主机列表$hosts
:
for host in $hosts; do
ssh $host "locate ${query@Q} | sed 's/^/$host:/'" &
done; wait
这还不完整——它不能很好地处理中断,并且可能存在输出线撕裂的情况。它应该作为独立脚本运行,不是作为一个函数(尽管将其包装在(...)
可能的工作中)。
对于缺少的旧版 Bash ${var@Q}
(我认为是 5.0 中的新功能),请使用$(printf %q "$var")
。两者都假设远程系统也具有遵循 sh/bash 引用规则的登录 shell。