我想将超过 1K 个文件从一台服务器移动到另一台服务器,但只复制了 29 个文件,并且无法复制重置,当我使用 SCP 时情况相同
#scripts for backup
#sripts prepared by dhafer [email protected]
#!/bin/bash
date=$(date +"%Y%m")
/usr/bin/expect<<EOF
cd /home/mdsp/lcftp/templc/sag/sa/run/sa/10.157.78.40
spawn bash -c "/usr/bin/scp *$date*.log [email protected]:/tmp/dhafer"
expect "Password:"
send "Zain@123\r"
expect eof
EOF
和
#scripts for backup
#sripts prepared by dhafer 0592996292 [email protected]
#!/bin/bash
DATE=$(date +"%Y%m")
HOST=10.157.78.143
PORT=22
USER=root
PASSWORD=Zain@123
SOURCE_FILE=/home/mdsp/lcftp/templc/sag/sa/run/sa/10.157.78.40/*$DATE*
TARGET_DIR=/tmp/dhafer
/usr/bin/expect<<EOD
spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
expect "password:"
send "$PASSWORD\r"
expect "sftp>"
send "put $SOURCE_FILE $TARGET_DIR\r"
expect "sftp>"
send "bye\r"
你能帮我检查一下吗?
答案1
可能是你的命令行太长了。您应该运行几个较小的scp
命令,例如使用xargs
.但是您的期望/密码脚本会使编码变得有点困难。
也许在这里你会找到一个“类似 xargs”的 scp 解决方案 使用 xargs 向 scp 提供参数
或者使用 find、tar、ssh 管道:
find . -maxdepth 1 -name "*$date*.log" -print0 |\
tar -czvf backup.tar.gz --null -T - |\
ssh user@host "cd /tmp/dhafer && tar xvzf -"
或者,您可以尝试rsync
不使用 shell 通配符:
rsync --include="*$date*.log" --exclude="*" ./ [email protected]:/tmp/dhafer/
笔记无论如何,如果您可以使用 ssh 的公钥身份验证,那将会很有帮助。