首页 > 解决方案 > SFTP批处理文件从远程复制到本地

问题描述

我在远程服务器中有一些文件。我需要将这些文件从远程服务器复制到我的本地服务器。

Source path : pABCDWPPP@170.20.100.10:/SRC_path (dummy server name)
Target path : /data/TGT_path

我试过这个...

infa@vm-ppp-50:/data/TGT_path$ sftp -oPort=10000 pABCDWPPP@170.20.100.10:/SRC_path
SSH Server supporting SFTP and SCP
Connected to 170.20.100.10.
Changing to: /SRC_path
sftp> ls -l
-rw-------   1 200      100            17 Dec 04 15:15 test-20191204-1572921093125.csv
-rw-------   1 200      100           592 Dec 02 10:59 test-20191125-1574678916536.csv
-rw-------   1 200      100             9 Dec 04 15:15 t-20191204-1575253807720.csv
-rw-------   1 200      100            15 Dec 04 15:15 test-20191204-1575253807720.csv
-rw-------   1 200      100            17 Dec 04 15:16 test-20191204-1575426603349.csv
sftp> bye

我必须创建一个批处理脚本,该脚本应该将这些文件从源路径复制到目标路径。

文件名可以不同。但它有一些我可以用作变量的模式。

这是可以在脚本中使用的语法:

sftp -oPort=10000 ${USERID}@170.20.100.10:${MAILBOXPATH} <<EOF
mget ${FILE}
bye
EOF

谁能帮我创建可以每天以批处理模式复制这些文件的脚本文件。我必须在 unix 中执行脚本。

标签: shellunixsftpbatch-processingvsftpd

解决方案


我会使用非常适合此任务的 rsync 而不是 SFTP:

#!/bin/bash
# backup.sh
rsync --modify-window=5 -rltzuv --delete [REMOTE_SERVER@REMOTE_DIR] [LOCAL_SERVER@LOCAL_DIR]

然后您可以按如下方式运行 cron 作业:

crontab crontab.sh

在哪里:

# content of crontab.sh (scheduled to run everyday at 2am)
0 2 * * * /bin/sh /path/to/backup.sh

推荐阅读