使用nc传输文件时清空文件

时间:2014-09-19 08:41:49

标签: bash shell ubuntu netcat

我在使用nc进行文件传输的奇怪情况上苦苦挣扎很长时间,我使用以下bash脚本将文件从A机器传输到B机器,脚本似乎没问题,文件正在传输到B机器,但是文件的大小是0字节,没有任何内容(它真的包含在机器A中),然后我第二次运行我的脚本,这次机器B确实包含内容,我可以知道我的脚本导致这个问题的哪一部分?百万感谢您的帮助!

#!/bin/bash
IPADDRSTR="$1"
COUNT=0
for x in $IPADDRSTR
do
#server
    IPERRSTR[$COUNT]=$(sshpass -p pass ssh -o StrictHostKeyChecking=no -p 22 root@$x '$(/usr/bin/nc -l -p1234 > /root/a.txt)&' > /dev/null 2>&1 | echo -n $?)

        if [ ${IPERRSTR[COUNT]} -eq "0" ]
        then
            nc $x 1234 < ./a.txt
            echo "done"
        fi
    COUNT=$((COUNT+1))
done

2 个答案:

答案 0 :(得分:0)

rsync在这里可能是更优雅的实用程序。我只是想让你开始。你的代码对我来说似乎没问题,但他们在上面提出了很好的观点。在这里阅读rsync:https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps

#!/bin/bash
IPADDRSTR="$1"
COUNT=0
for x in $IPADDRSTR
do
#server
    IPERRSTR[$COUNT]=$(sshpass -p pass ssh -o StrictHostKeyChecking=no -p 22 root@$x '$(/usr/bin/nc -l -p1234 > /root/a.txt)&' > /dev/null 2>&1 | echo -n $?)

        if [ ${IPERRSTR[COUNT]} -eq "0" ]
        then
            #######Place rysnc command here instead.######## 
            echo "done"
        fi
    COUNT=$((COUNT+1))
done

答案 1 :(得分:0)

感谢所有人,我想我已经解决了问题,这是原因和解决方案

传输文件为0字节的原因是传输甚至没有启动!由于nc客户端在nc监听之后立即被调用,因此nc客户端有可能比监听过程更快地启动,因此我尝试在nc -l命令之后的某个时间(~1s)休眠以确保监听过程在客户端开始之前启动,然后一切正常。

感谢大家的回复!