我正在使用bash脚本执行sftp,脚本正在运行并启动sftp进程并完成它但不会复制完整数据。(因为我的数据大小约为600 MB,它只复制800KB并且终止。手动操作时工作正常。
以下是我的脚本内容
#!/bin/bash
HOST=x.x.x.x
PORT=22
USER=abc
PASSWORD=password
SOURCE_FILE=/nobackup/file.gz
TARGET_DIR=/home
/usr/bin/expect<<!
spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
expect "password:"
send "$PASSWORD\r"
expect "sftp>"
send "get $SOURCE_FILE $TARGET_DIR\r"
expect "sftp>"
send "bye\r"
!
请帮忙。
答案 0 :(得分:1)
我的sftp实现允许批处理模式,为什么需要expect-script?
.
.
echo "get $SOURCE_FILE $TARGET_DIR" | sftp -b - -o Port=$PORT $USER@$HOST
答案 1 :(得分:0)
考虑lftp,它是明确构建为可编写脚本的(并支持许多协议,sftp):
user=abc
password=password
host=x.x.x.x
port=22
source_file=/nobackup/file.gz
target_dir=/home
printf -v cmd 'open %q; get -o %q %q' \
"sftp://$user:$password@$host:$port/" \
"${target_dir}/${source_file##*/}" \
"$source_file"
lftp -c "$cmd"
printf
生成类似于以下内容的字符串:
open sftp://abc:password@x.x.x.x:22/; get -o /home/file.gz /nobackup/file.gz
...这是一个有效的lftp脚本。