首页 > 解决方案 > 多个站点 FTP 下载,Bash 脚本中的多个变量 - 函数、循环还是其他?

问题描述

我尝试过搜索,但找不到我想要的确切内容,也许我什至不知道要搜索什么...

我需要 FTP 来自多个站点的各种 csv 文件,每个站点都有不同的凭据。我可以使用以下内容一一完成,但是我需要为 30 个站点执行此操作,并且不想复制粘贴所有这些。

写这篇文章的最佳方式是什么,如果你能告诉我如何或给我指出一个很好的答案。

对于加分(我可能不得不问一个单独的问题),mget 不能在 linux 到 linux 上工作,只能从 linux 到 windows 工作。我也尝试过 curl 但也没有运气。

非常感谢。

ps不确定它是否有所作为,但我将每 15 分钟将其作为 cron 作业运行一次。我对那部分没意见;)

#!/bin/bash
chmod +x ftp.sh

#Windows site global variables
ROOT='/data'
PASSWD='passwd'

# Site 1
SITE='site1'
HOST='10.10.10.10'
USER='sitename1'

ftp -in $HOST <<EOF
user $USER $PASSWD
binary
cd "${ROOT}/${SITE}/"
lcd "/home/Downloads"
mget "${SITE}}.csv1" "${SITE}}.csv2"       #needs second "}" as part of file name
quit
EOF
echo "Site 1 FTP complete"

# Site 2
SITE='site2'
HOST='20.20.20.20'
USER='sitename2'

ftp -in $HOST <<EOF
user $USER $PASSWD
binary
cd "${ROOT}/${SITE}/"
lcd "/home/instrum/Downloads"
mget "${SITE}}.csv1" "${SITE}}.csv2"       #needs second "}" as part of file name
quit
EOF
echo "Site 2 FTP complete"

#Linux site Global variables
ROOT='/home/path'
USER='user'
PASSWD='passwd2'

#Site 3
SITE='site_3'
HOST='30.30.30.30'

ftp -in $HOST << EOF
user $USER $PASSWD
binary

cd "${ROOT}/${SITE}/"
lcd "/home/Downloads"
get "${SITE}file1.csv"             #mget not working for linux to linux FTP, don't know why.
get "${SITE}file2.csv"  
quit
EOF
echo "Site 3 FTP complete"

#Site 4
SITE='site_4'
HOST='40.40.40.40'

ftp -in $HOST << EOF
user $USER $PASSWD
binary

cd "${ROOT}/${SITE}/"
lcd "/home/Downloads"
get "${SITE}file1.csv"             #mget not working for linux to linux FTP, don't know why.
get "${SITE}file2.csv"  
quit
EOF
echo "Site 4 FTP complete"

标签: bashfunctionloopsftpmget

解决方案


对于凭据,将其放入一个单独的文件中,其中站点 1 的变量为 site1、host1、user1 和评论,因此如果其他用户正在运行此脚本,用户将能够快速理解这一点,而且花费更少修改文件密码并产生错误的机会。当您的主脚本加载时,您可以在运行主脚本之前使用密码加载文件。

在您的主脚本上,如果所有站点的功能都相似,并且您总是要为所有 30 个站点运行相同的代码,那么您可以使用从 1 开始到 30 结束的 while 循环。在您的代码中修改变量,站点,主机和用户,在末尾插入数字,以使用正确的变量执行代码。

例如,如果这些服务器在您的网络上,则有一些用于复制文件的工具,例如 rsync,它也很有效。如果你想看看


推荐阅读