统计ssh查找结果

Count ssh find results

我的脚本中有这部分,我会将 1 小时前的文件从一台服务器复制到我当前登录的当前服务器:

ssh testuser@sampleServer find /home/testuser/files -type f -mmin -60 > /home/user/bin/tmp/results.txt

while read LINE
do
    scp -r testuser@sampleServer:$LINE /home/user/bin/tmp
done < /home/user/bin/tmp/results.txt

我想在代码的第一行计算检索到的文件数并将其值存储在一个变量中,所以我只输入:

COUNT=`ssh testuser@sampleServer find /home/testuser/files -type f -mmin -60 | wc -l`

但我相信这仍然可以改进,因为它是多余的。 你对我如何修改它有什么建议吗?谢谢

打开 n+1 TCP 连接并为每个连接执行 SSH 握手等以复制 n 文件似乎效率极低。

这是您通常的做法(同时避免使用讨厌的临时文件):

ssh testuser@sampleServer '
    find /home/testuser/files -type f -mmin -60 -print0 |
    xargs -r0 tar zcf -' |
tar -C /home/user/bin/tmp -z -x -f -

假设任何文件名中都没有换行符(这也会破坏您的原始脚本)并且您不介意在 /home/user/bin/tmp 中创建一个镜像目录结构(如果有的话)远程站点。

现在,向您的原始脚本添加行数会很简单 -- 为什么不 运行 它在临时文件中呢? -- 但这里也同样容易。只需将 -v 选项添加到提取 tar 过滤器并计算输出行数。

... | tar -C /home/user/bin/tmp -z -x -v -f - | wc -l