无法使用 shell 脚本将超过 29 个文件复制到目标服务器

无法使用 shell 脚本将超过 29 个文件复制到目标服务器

我想将超过 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 的公钥身份验证,那将会很有帮助。

相关内容