Назад | Перейти на главную страницу

Загрузка по FTP в BASH скрипте

Мне нужно загрузить все содержимое каталога / home / test на мой ftp-сервер в определенной папке. Затем я буду планировать скрипт ежечасно через cron. Есть примеры?

NB. учтите, что я использую Netgear ReadyNAS Duo (ящик для debian), и я не могу установить lftp или аналогичные, только стандартные команды :)

Нашел в сети этот bash-скрипт с качественной документацией:

#!/bin/bash

HOST=ftp.server.com  #This is the FTP servers host or IP address.
USER=ftpuser             #This is the FTP user that has access to the server.
PASS=password          #This is the password for the FTP user.

# Call 1. Uses the ftp command with the -inv switches. 
#-i turns off interactive prompting. 
#-n Restrains FTP from attempting the auto-login feature. 
#-v enables verbose and progress. 

ftp -inv $HOST << EOF

# Call 2. Here the login credentials are supplied by calling the variables.

user $USER $PASS

# Call 3. Here you will change to the directory where you want to put or get
cd /path/to/file

# Call4.  Here you will tell FTP to put or get the file.
put test.txt

# End FTP Connection
bye

EOF

После настройки и сохранения сценария .sh сделайте его исполняемым:

chmod + x ftpscript.sh

Наконец, настройте свою cronjob

команда в одной строке:

ftp -in -u ftp://username:password@servername/path/to/ localfile

curl может загружать файлы на FTP-серверы.

curl -T "$FILE(s)" -u $USERNAME:$PASSWORD $SERVER/$DIR/

Вы также можете использовать шаблон глобуса для $FILE.

если у вас есть 'curl', который является довольно стандартным, он может выполнять автоматическую загрузку по FTP (см. справочную страницу для параметра -T)

Если ssh установлен и настроен для передачи файлов, вы можете использовать scp.

Если не netcat или rsync может быть вариант.

Если у вас есть возможность устанавливать или создавать программы, утилита называется ftpsync может быть именно то, что вы ищете. [Я никогда не пробовал, и, кажется, есть несколько утилит, называемых так или чем-то очень похожим.]

В сценарии bash вы должны иметь возможность делать что-то вроде:

    #!/bin/bash
    echo "
    verbose
    open 1.2.3.4
    USER ftpuser ftppasswd
    put /path/to/stuff.tar.gz
    bye
    " > ftp -n > ftp_$$.log

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