bash - 计数ssh查找结果

标签 bash ssh scp wc

我的脚本中包含这一部分,我会将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

关于bash - 计数ssh查找结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33950649/

相关文章:

linux - 使用 bash 脚本输入 ssh 密码,没有那个文件或目录

shell - 如何在 scp 中逃脱

python - brew install python,然后是: "python-2.7.6 already installed, it' s just not linked"

R - 具有多个管道的系统命令不返回标准输出

Bash 脚本,比较数字

java - 如何使用 JSch 库在 ec2 连接中将 .pem 文件内容用作字符串

Ruby Net::SSH 未定义方法 'shell'

bash - cli和jq,如何获取使用unique_by过滤后的属性值

bash - 通过 ssh 在几个机器上并行执行命令(使用 bash)

创建文件时自动在服务器之间传输 Linux 文件