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