web-dev-qa-db-ja.com

BASHスクリプトでのFTPアップロード

ディレクトリ/ home/testのコンテンツ全体をFTPサーバーの特定のフォルダーにアップロードする必要があります。次に、cronを介してスクリプトを1時間ごとにスケジュールします。例はありますか?

NB。私がNetgear ReadyNAS Duo(debianボックス)を使用していて、lftpまたは同様のものをインストールできないことを考慮してください。標準のコマンドのみです:)

6
Fabio B.

品質のドキュメントがあるこの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

最後に、cronジョブを設定します

12
Brendan

1行でコマンド:

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

curlは、FTPサーバーにファイルをアップロードできます。

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

$FILEのグロブパターンを使用することもできます。

7
Ray

かなり標準的な 'curl'がある場合、無人FTPアップロードを実行できます(-Tオプションについては、manページを参照してください)。

2

Sshがインストールされ、ファイル転送を許可するように構成されている場合は、scpを使用できます。

そうでない場合、netcatまたはrsyncがオプションになることがあります。

0
3dinfluence

Bashスクリプトでは、次のようなことができるはずです。

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

最初にディレクトリをタール化​​することをお勧めし、それをはるかに簡単にします。また、ディレクトリのサイズとネットワークの速度に応じて、差分tarの実行を検討することもできます。

0
sreimer

プログラムをインストールまたはビルドできる場合、 ftpsync と呼ばれるユーティリティが探しているものである可能性があります。 [私は一度も試したことがないが、それと呼ばれる、または非常によく似たユーティリティがいくつかあるようだ。]

0