Несколько FTP-загрузок с сайта, несколько переменных в сценарии Bash - функция, цикл или что-то еще?

Я пробовал искать, но не могу найти именно то, что мне нужно, и, возможно, я даже точно не знаю, что искать ...

Мне нужно отправить по FTP различные файлы CSV с нескольких сайтов, каждый с разными учетными данными. Я могу сделать это один за другим со следующим, однако мне нужно сделать это для 30 сайтов, и я не хочу копировать и вставлять все это.

Как лучше всего это написать, и если вы можете показать мне, как или указать мне ответ, это было бы здорово.

А для бонусных баллов (мне, возможно, придется задать отдельный вопрос), mget не работает с linux на linux, только с linux на windows. Я тоже пробовал завивать, но тоже не повезло.

Большое спасибо.

ps не уверен, имеет ли это значение, но я буду запускать это как задание cron каждые 15 минут. Я в порядке с этой частью;)

      #!/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 ответ

Для учетных данных поместите их в отдельный файл с переменными для сайта 1 as, site1, host1, user1 и комментариями, чтобы, если другой пользователь запускает этот сценарий, пользователь мог бы понять это быстро, а также за меньшие деньги. шанс изменить пароли в файле и создать ошибку. Когда ваш основной скрипт загрузится, вы можете загрузить файл с паролями перед запуском основного скрипта.

В вашем основном скрипте, если функциональность одинакова на всех сайтах, и вы всегда собираетесь запускать один и тот же код для всех 30 сайтов, вы можете использовать цикл while, начиная с 1 и заканчивая 30. В вашем коде исправьте переменные site, host и user, чтобы вставить число в конце, чтобы выполнить код с правильными переменными.

Существуют инструменты для копирования файлов, например, если эти серверы находятся в вашей сети, например rsync, который также эффективен. Если вы хотите взглянуть

Другие вопросы по тегам