我在我的脚本中有这个部分,我将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`
但我相信这仍然可以改进,因为它是多余的。 你对我如何修改它有什么建议吗?感谢
答案 0 :(得分:1)
打开 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 -
这假设任何文件名中都没有换行符(这也会破坏原始脚本),并且如果有{1}},则不要介意在/home/user/bin/tmp
中创建镜像目录结构。远程站点。
现在,在原始脚本中添加行数很简单 - 为什么不在临时文件上运行? - 但这里也同样容易。只需在解压缩-v
过滤器中添加tar
选项,即可输出输出行数。
... | tar -C /home/user/bin/tmp -z -x -v -f - | wc -l