2015-11-27 56 views
1

我有这部分在我的剧本,我会从一台服务器复制1个小时前的文件,以我目前登录当前服务器:计数SSH查找结果

ssh [email protected] find /home/testuser/files -type f -mmin -60 > /home/user/bin/tmp/results.txt 

while read LINE 
do 
    scp -r [email protected]:$LINE /home/user/bin/tmp 
done < /home/user/bin/tmp/results.txt 

我要计数的文件数量在代码的第一行中检索它的值存储在一个变量,所以我只是把:

COUNT=`ssh [email protected] find /home/testuser/files -type f -mmin -60 | wc -l` 

但我相信这能够进一步提高,因为它是多余的。 你对我如何修改它有什么建议吗?由于

回答

1

开幕ň +1的TCP连接并执行SSH握手等每个复制ň文件似乎太没效率了。

这是你如何通常会做(又可以避免讨厌的临时文件):

ssh [email protected] ' 
    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中创建镜像目录结构(如果远程站点上有一个目录结构)。

现在,添加行数到您的原始脚本将会很简单 - 为什么不在临时文件上运行? - 但在这里可以很容易。只需在提取tar过滤器中添加一个-v选项并确定输出线的数量。

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

我非常抱歉,先生,但这并不是真的很清楚。我仍然是一个新手,我希望你明白。 – User122113

+0

我们在远程'ssh'会话的标准输出中创建一个tar文件,并在管道的另一端从文件中提取文件。这可以通过单个SSH会话完成整个事务。 – tripleee

+0

但是,对于你的问题,最小的,无影响的答案应该是'COUNT = $(wc -l <​​/home/user/bin/tmp/results.txt)' – tripleee