web-dev-qa-db-ja.com

FTPでrsyncを使用する方法

UNIX:

正常に動作する次のcmd行があります。

rsync -avr -e ssh /home/dir [email protected]:/home/

しかし、FTPサーバーのみが存在するリモートサーバーにrsyncするように設定する必要があります。どうすればいいですか?

私はrsyncのヘルプを見ましたが、すぐに道に迷いました(私はこれを頻繁に行いません)。

191
bumperbox

あなたはしません。 rsyncはあなたのためにそれを行うことができません、それはそれ自身のプロトコルであり、FTP経由では機能しません。

ただし、 csync を試してみることをお勧めします。 IIRCは、HTTPを介してrsyncのような動作を提供します。 FTP経由で機能するかどうかについてコメントすることはできません。試してみる必要があります。

80
serverhorror

rsyncは、他の人が言及している理由で機能しません。ただし、lftpおよびncftpどちらにも、おそらくニーズを満たす「ミラー」モードがあります。

これを使用して、ローカルディレクトリからftpまたはsftp Webホストにデータをプッシュします。

lftp -c "set ftp:list-options -a;
open ftp://user:[email protected]; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
163
easel

easel で記述されているように、lftpは優れたツールです。

スクリプトをパラメータ化して、

exclude-glob

シェルのglob機能(* ,? ..)を使用してファイル名を除外するオプション:

#!/bin/bash    
Host="your.ftp.Host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$Host"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

警告:ターゲットディレクトリが存在することを確認してください。存在しない場合、cdコマンドは失敗するため、ツリーの削除を含む操作 filesは間違ったディレクトリ(ルート)で行われます!

--deleteオプションがデフォルトで無効になるようにスクリプトを更新しました。DELETE= commandのコメントを外して有効にします。

123
GabrieleV

実際にやろうとしていることに応じて、curlftpsを使用してftpフォルダーをマウントし、次に2つの「ローカル」フォルダーをrsync使用することもできます。

インストールはディストリビューションによって異なるため、一般化することはできませんが、install Fuseおよびcurlftpfsをインストールする必要があります(prolly DebianにはデフォルトでFuseがすでにインストールされています)。次に:

  1. Sudo apt-get install curlftpfs

  2. Fuseモジュールがロードされていることを確認してください(modprobe Fuse

  3. Sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

最後のカンマの後にスペースがないことに注意してください(タイプミスではありません!)。これで満足する場合、または毎回作成したくない場合は、それをfstabに追加できます(通常は/etc/fstab):

curlftpfs#user:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0

その場合、Fuseモジュールが前にロードされていることを確認する必要があります。

ただし、次の2つの点に注意してください。

  • 開発者が1〜2年前にプロジェクトを中止したため、当面の使用可能性/安定性はわかりません。
  • パスワードに奇妙な文字が含まれている場合、curlftpfsは失敗する可能性があります(.netrc)。

weex ...があります.

Weexは、Webページやその他のFTPアーカイブをリモートで管理するタスクを自動化するように設計されたユーティリティです。必要に応じてアップロードとリモート削除を実行することにより、ローカルファイルのセットをリモートサーバーに同期します。

16
Johan

rsyncはftpでは機能しません。リモート側では、rsyncデーモンまたはrsyncを呼び出すことができるシェルが必要です。 Ftpでは通常、いくつかのコマンドを呼び出すことができますが、rsyncはその1つではありません。 「lftp」のようなftpタスクを自動化するためのツールは他にもあります。

9
Ian Kelling

これは良い無料のようです: https://savannah.gnu.org/projects/ftpsync/

8
pauska

あなたがやろうとしているように見えるものについては、wgetを使用することもできます。

wget -m ftp:// username:[email protected]

7
Aaron

Curlftpfsを使用してftpをマウントし、 http://linux.die.net/man/1/curlftpfs の後にrsyncを使用できます。

5
shaftmx

GVFS/FTPを使用しています。リモートFTPサーバーをgigoloでマウントします。ローカルディレクトリと見なされるので、ローカルファイルで機能するほとんどすべてが機能します。 rsyncは、リモートでファイルハッシュを計算して、ファイルを転送せずにファイルを比較するように設計されていますが、仮想ファイルでそれを行うと、とにかくファイルを転送します。 unisonとfreefilesyncは通常はうまく機能しますが、アップロードしたファイルの名前を変更したいときに問題が発生しました。ダウンロードは問題ありません。これはgvfs 1.6.1の問題である可能性があります。

4
Papou

Jonas Sのソリューションは状況に応じて役立ちます。たとえば、ダウンロード速度が速くアップロードが遅い場合、サーバー上のファイルのチェックは、ファイルを不必要にアップロードするよりも比較的高速です。

ただし、おそらくCurlFTPFSを使用する必要があります。 http://packages.ubuntu.com/search?suite=default&section=all&Arch=any&searchon=names&keywords=curlftpfs

ただし、一般的には、rsyncの代わりに通常のFTPクライアントを使用することをお勧めします。

3
user25738

タスクを自動化したい場合は、lftpを使用してスクリプトを作成できます。一部の人々が上記に投稿したように、ワンタイムソリューションを探している場合(つまり、Webサイト全体をダウンロードする必要がある場合) ftp経由で/別のサーバーに移動します)ncftpを使用します。シンプルです。まだインストールされていない場合は、インストールします。

apt-get install ncftp

または

yum install ncftp

(申し訳ありませんがdebian/Red Hatベースのディストリビューションではありません。)

インストールしたら、ターミナルでncftpを開き、次のように入力します。

open -u ftpusername ftp.thedomain.com

パスワードの入力を求められますので、それを入力してから:

get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/

残りの作業はあなたのために行われます。

2
desdecode

私はあなたがこれを行うことができるとは思わない、あなたがRsyncを行おうとしているサーバーはFTPサーバーしか動かないでしょう、それはRsyncがそれを送信しているコマンドを理解しません。

これを実行する理由が、ポート21にしかアクセスできないが、サーバーの制御権があるという場合は、サーバーでRsyncがリッスンするポートを変更できますが、これは明らかに、そのポートでFTPを使用したい。

2
Sam Cogan

rclone は、ftpおよびクラウドストレージプロバイダー(Amazon S3、Dropbox、Googleドライブ)を含む他の多くのプロトコルを介してディレクトリ同期を行う優れたソフトウェアです。ローカルまたはリモートストレージの任意の組み合わせとの間で同期できます。

ftpリモートをセットアップするには これらの手順 に従ってください。

これが完了すると、同期操作は次のようになります。

rclone sync /home/dir FTP_REMOTE:/home --progress 
1
bernie

「サイトコピー」または「ミラー」を使用すると、帯域幅を大幅に節約できます。

どちらも効率的な増分更新を処理します。

1
Kan-Ru Chen

そのための独自のコマンドラインツールを作成しました: ftpsync

どうして?シンプルでエレガントなため、他のツールは多くの依存関係を必要とし、コンパイルすることも動作しないこともあります(MacOs High Sierraのlftpなど)。 Ftpsyncは純粋なPythonで記述されており、サードパーティのライブラリを必要とせず、サイズも小さいので、プロジェクトにファイルを含めるだけで済みます。

使用法:プロジェクトディレクトリにcdして、次のように入力します。

ftpsync user:[email protected]/remote/dir --delete

--deleteは、ローカルに存在しないリモートファイルを削除することを意味します。

同期したくないがraw ftpコマンドを実行するだけの場合:

ftpsync -c '...'

ファイルの送信や名前の変更など、いくつかの簡単な操作に役立ちます。

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
0
superdario128

Wputもあります:

wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir

ユーザー名とパスワードは〜/ .netrcから読み取られます。それ以外の場合、特にセキュリティに関心がない場合は、それらを ftp:// username:[email protected] として指定できます。

0
Ole Wolf