Webページをローカルディレクトリと同期させる必要があります。非常に効果的なツールはlftp
で、スクリプトで使用します。
#!/bin/bash
Host='ftp.remote.it'
USER='username'
PASS='password'
TARGETFOLDER='.'
BASEFOLDER='/home/my/folder/'
SOURCEFOLDER='_site'
cd $BASEFOLDER || exit
lftp -f "
open $Host
user $USER $PASS
mirror --reverse --only-newer --ignore-time --delete \
--verbose $SOURCEFOLDER $TARGETFOLDER
bye
"
オプション--delete
を使用することで、ファイルをローカルで削除すると、対応するファイルもリモートで削除されるようになります。ただし、ウェブサイトには、ローカルウェブサイトからのものではなく、更新時に削除したくない追加のものを入れました(--delete
の効果はです)リモートフォルダーのすべて、およびローカルフォルダーに存在しないサブフォルダーが削除されます)。
解決策は、最後の更新時にローカルフォルダーに存在するファイルのリストを保持することです。次に、ローカルディレクトリとリストを比較することで、削除されたファイルのリストを取得できます。このように、ローカルWebサイトのミラーリングは2つのステップで行われます。最初にローカルで削除されたファイルに対応するWebサイト上のファイルを削除し、次にlftp
を使用してすべての更新された新しいファイルをアップロードしますなしオプション--delete
。
しかし、驚いたことに、lftp(または他のftpクライアント)がファイルのリストをファイルからリモートで削除する方法を見つけられませんでした。
以下はテストされておらず、 doc を読み取り、rsync
の動作に合わせて調整しています。
Manページによると、mirror
には次のオプションがあります。
-i RX, --include=RX include matching files
-x RX, --exclude=RX exclude matching files
-I GP, --include-glob=GP include matching files
-X GP, --exclude-glob=GP exclude matching files
--include-rx-from=FILE
--exclude-rx-from=FILE
--include-glob-from=FILE
--exclude-glob-from=FILE load include/exclude patterns from the file, one per
line
それらを使用してください。ローカルマシンでリモートで削除したくないファイル、フォルダ、またはグロブ(ワイルドカード)のリストを保持し、lftp
にそこにあるものをすべて無視するように指示するだけで、リモートで暗黙的に削除されません。サイド(--delete-excluded
スイッチ...)。これらはローカルに存在する必要はありません(その点でrsync
のように動作する場合)。