bash - 多个站点 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"
解决方案
对于凭据,将其放入一个单独的文件中,其中站点 1 的变量为 site1、host1、user1 和评论,因此如果其他用户正在运行此脚本,用户将能够快速理解这一点,而且花费更少修改文件密码并产生错误的机会。当您的主脚本加载时,您可以在运行主脚本之前使用密码加载文件。
在您的主脚本上,如果所有站点的功能都相似,并且您总是要为所有 30 个站点运行相同的代码,那么您可以使用从 1 开始到 30 结束的 while 循环。在您的代码中修改变量,站点,主机和用户,在末尾插入数字,以使用正确的变量执行代码。
例如,如果这些服务器在您的网络上,则有一些用于复制文件的工具,例如 rsync,它也很有效。如果你想看看
推荐阅读
- python - pandas 中是否有任何正则表达式,我们可以在其中定义第一个和最后一个字符,以及介于两者之间的任何内容
- symfony - 为什么 TinyMCE 会删除我的自定义 mpdf html 标签?
- ruby-on-rails - Rails Action Mailer Preview 不起作用,因为没有测试单元
- mongodb - 如果条件 MongoDB 聚合
- c++ - 如何将字节数组的一部分转换为 std::string 并避免在堆上分配 char 数组?
- xpath - XQuery - 我如何计算和保存地图中的信息
- elasticsearch - 在 Elasticsearch 中通过 id 获取上一个/下一个搜索结果的通用方法
- selenium-webdriver - 无法定位元素:{"method":"xpath","selector":"//*[@id='identify_email']"}
- android - 在android中拍摄没有预览的照片
- rpa - Automation Anywhere 控制室设备连接错误