个人技术分享

需求:使用sftp命令定时拉取文件

  • 原始命令
 1. sftp -oIdentityFile=/student/keys/id_rsa -oPort=8111 xxx.com
 2. cd /school/download/
 3. ls
 4. get xxx.csv
  1. 创建脚本down.sh,获取前一天的文件
#!/bin/bash
echo "Starting to sftp..."
# 使用sftp命令连接到远程服务器并执行操作
sftp -b - -oIdentityFile=/student/keys/id_rsa -oPort=8111 xxx.com << EOF
cd /school/download/
# 匹配以昨天的日期开头的所有文件
mget $(date -d "yesterday" +%Y%m%d)*.csv
bye
EOF
echo "$(date -d "yesterday" +%Y%m%d):download success ..." >> /home/sftp_download.log
  1. 添加定时任务
# 确保它有执行权限
chmod +x /path/to/down.sh

# 编辑cron任务
crontab -e

# 添加定时任务
0 1 * * * /path/to/down.sh

# 示意
 * * * * * command-to-be-executed  
 * - - - -  
| | | | |   
| | | | +---- Day of the week (0 - 7) [Both 0 and 7 mean Sunday, or use names]  
| | | +------ Month (1 - 12)  
| | +-------- Day of the month (1 - 31)  
| +---------- Hour (0 - 23)  
+------------ Minute (0 - 59)
  • 可能遇到的问题
-bash: ./down.sh:/bin/bash^M
解决:执行 sed -i 's/\r$//' down.sh