任意のUNIX:
私は正常に動作する次のコマンドラインを持っています。
rsync -avr -e ssh /home/dir user@example.com:/home/
しかし、FTPサーバーのみが存在するリモートサーバーにrsyncするように設定する必要があります。それについてどうすればいいですか?
rsyncのヘルプを見ましたが、すぐに迷子になりました(このようなことはあまりしません)。
任意のUNIX:
私は正常に動作する次のコマンドラインを持っています。
rsync -avr -e ssh /home/dir user@example.com:/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:password@your.ftp.com;
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
wput
、帯域幅制限が組み込まれています。
書かれたようイーゼル、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コマンドは失敗します。そのため、ファイルツリーの削除を含む操作は 、間違ったディレクトリ(ルート)で行われます。
--delete
オプションをdefautによって無効にし、コメントを外して有効にするようにスクリプトを更新しましたDELETE= command
。
cd $RCD
a-script-with-a-typoが間違ったディレクトリからファイルを誤って削除するのを防ぐために、前にこれを行いましたset cmd:fail-exit yes
。(それはそうlftp
する前に、そして- 。あなたは、次のコマンドを発行するまで、それが実際に終了したことに気づかない)cd $LCD
:私はこれを行うと思います(ローカルシェルに、それはスクリップの上部に、です)set -eu
。
mirror
、ひいては--delete
:間違ったディレクトリからDファイル。(しかし、私はそれらを再びコピーしたので、その場合、それは重要ではありませんでした。おそらく他の誰かにとって重要です。)
実際に何をしようとしているかに応じて、別の完全に異なるアプローチを使用curlftps
してftpフォルダーをマウントし、次にrsync
2つの「ローカル」フォルダーをマウントすることができます。
私はその上で一般化することはできませんので、インストールはディストリビューションによって異なりますが、あなたはインストールする必要があります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:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0
その場合、事前にヒューズモジュールがロードされていることを確認する必要があります。
ただし、次の2つの点に注意してください。
curlftpfs
失敗する可能性があります(多分あなたはで何かを行うことができます.netrc
)。umount DIR
場所DIR
を使用します/path/to/ftp/folder
。
weexがあります...
Weexは、Webページまたはその他のFTPアーカイブをリモートで管理するタスクを自動化するように設計されたユーティリティです。必要に応じてアップロードとリモート削除を実行することにより、ローカルファイルのセットをリモートサーバーに同期します。
$ weex yourFTPconfigName
ここにマニュアルlinuxcertif.com/man/1/weex-sobi3ch 15
これは、良い自由なフィットのようです:https : //savannah.gnu.org/projects/ftpsync/
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を使用して、上記で投稿したようにスクリプトを作成できます。1回限りのソリューションを探している場合(つまり、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/
それはあなたのために仕事の残りを行います..幸運
「サイトコピー」または「ミラー」を使用すると、多くの帯域幅を節約できます。
どちらも効率的な増分更新を処理します。
wputもあります:
wput --timestamping --reupload --dont-continue source-files ftp://target.host/dir
ユーザー名とパスワードは〜/ .netrcから読み取られます。それ以外の場合、特にセキュリティに関心がない場合は、ftp:// username:password@target.hostとして提供できます。
そのための独自のコマンドラインツールを作成しました: ftpsync
どうして?シンプルでエレガントなため、他のツールは多くの依存関係を必要とし、時にはコンパイルし、時には機能しません(MacOs High Sierraのlftpなど)。Ftpsyncは純粋なPythonで書かれており、サードパーティのライブラリを必要とせず、小さく、プロジェクトにファイルを含めることができます。
使用法:プロジェクトディレクトリにcdして、次を入力します。
ftpsync user:pass@ftp.address.url/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'
sftpをインストールしてから、rsyncを使用できます。
私は次のものを使用します。
rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh root@192.168.0.100:/folder1/ /folder2/