UNIX:
正常に動作する次のcmd行があります。
rsync -avr -e ssh /home/dir [email protected]:/home/
しかし、FTPサーバーのみが存在するリモートサーバーにrsyncするように設定する必要があります。どうすればいいですか?
私はrsyncのヘルプを見ましたが、すぐに道に迷いました(私はこれを頻繁に行いません)。
あなたはしません。 rsyncはあなたのためにそれを行うことができません、それはそれ自身のプロトコルであり、FTP経由では機能しません。
ただし、 csync を試してみることをお勧めします。 IIRCは、HTTPを介してrsyncのような動作を提供します。 FTP経由で機能するかどうかについてコメントすることはできません。試してみる必要があります。
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"
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
のコメントを外して有効にします。
実際にやろうとしていることに応じて、curlftps
を使用してftpフォルダーをマウントし、次に2つの「ローカル」フォルダーをrsync
使用することもできます。
インストールはディストリビューションによって異なるため、一般化することはできませんが、install Fuse
およびcurlftpfs
をインストールする必要があります(prolly DebianにはデフォルトでFuse
がすでにインストールされています)。次に:
Sudo apt-get install curlftpfs
Fuse
モジュールがロードされていることを確認してください(modprobe Fuse
)
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つの点に注意してください。
curlftpfs
は失敗する可能性があります(.netrc
)。weex ...があります.
Weexは、Webページやその他のFTPアーカイブをリモートで管理するタスクを自動化するように設計されたユーティリティです。必要に応じてアップロードとリモート削除を実行することにより、ローカルファイルのセットをリモートサーバーに同期します。
rsyncはftpでは機能しません。リモート側では、rsyncデーモンまたはrsyncを呼び出すことができるシェルが必要です。 Ftpでは通常、いくつかのコマンドを呼び出すことができますが、rsyncはその1つではありません。 「lftp」のようなftpタスクを自動化するためのツールは他にもあります。
これは良い無料のようです: https://savannah.gnu.org/projects/ftpsync/
あなたがやろうとしているように見えるものについては、wgetを使用することもできます。
Curlftpfsを使用してftpをマウントし、 http://linux.die.net/man/1/curlftpfs の後にrsyncを使用できます。
GVFS/FTPを使用しています。リモートFTPサーバーをgigoloでマウントします。ローカルディレクトリと見なされるので、ローカルファイルで機能するほとんどすべてが機能します。 rsyncは、リモートでファイルハッシュを計算して、ファイルを転送せずにファイルを比較するように設計されていますが、仮想ファイルでそれを行うと、とにかくファイルを転送します。 unisonとfreefilesyncは通常はうまく機能しますが、アップロードしたファイルの名前を変更したいときに問題が発生しました。ダウンロードは問題ありません。これはgvfs 1.6.1の問題である可能性があります。
Jonas Sのソリューションは状況に応じて役立ちます。たとえば、ダウンロード速度が速くアップロードが遅い場合、サーバー上のファイルのチェックは、ファイルを不必要にアップロードするよりも比較的高速です。
ただし、おそらくCurlFTPFSを使用する必要があります。 http://packages.ubuntu.com/search?suite=default§ion=all&Arch=any&searchon=names&keywords=curlftpfs
ただし、一般的には、rsyncの代わりに通常のFTPクライアントを使用することをお勧めします。
タスクを自動化したい場合は、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/
残りの作業はあなたのために行われます。
私はあなたがこれを行うことができるとは思わない、あなたがRsyncを行おうとしているサーバーはFTPサーバーしか動かないでしょう、それはRsyncがそれを送信しているコマンドを理解しません。
これを実行する理由が、ポート21にしかアクセスできないが、サーバーの制御権があるという場合は、サーバーでRsyncがリッスンするポートを変更できますが、これは明らかに、そのポートでFTPを使用したい。
「サイトコピー」または「ミラー」を使用すると、帯域幅を大幅に節約できます。
どちらも効率的な増分更新を処理します。
そのための独自のコマンドラインツールを作成しました: 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'
Wputもあります:
wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir
ユーザー名とパスワードは〜/ .netrcから読み取られます。それ以外の場合、特にセキュリティに関心がない場合は、それらを ftp:// username:[email protected] として指定できます。