lftpのmirror(ミラー)機能を使ってウェブサイトを更新するときにアップロード対象から特定ファイルを除外する方法
lftp はとても便利。
諸事情により、XonWindowsからCygwinに乗り換えたが、 最新のCygwinにはlftpのバイナリが含まれていてとても助かる。
諸事情
いままで、vimなどで日本語の扱いが楽、などの理由で、 CygwinのかわりにXonWindows3を使ってきたが、Python2.5が使いたかったので、 Cygwinを使うことにした。
Cygwin付属のvimは、そのままでは日本語が扱えないが、 そこはがんばって設定するとかいった努力はやめて、kaoriyaのvimを 素直に使うことにした。
lftp で特定ファイルを除外(exclude)してミラー(mirror)
lftpでローカルで構築したウェブサイトをサーバにアップロードするときに
mirrorコマンドを使う。
このとき、ローカルにあるが、サーバにアップロードしてほしくないファイルを -x または -X オプション
を使って除外(exclude)することができる。
ステップ1
ファイル upload.lftp ファイルを作成して以下のような内容を記述
open ftp.foobar.jp
cd ~/
mirror -Rv -X .svn/ -X *.class -X *.psd -X *.txt -x Makefile www/
exit
- ※ 除外オプションである -x ,-Xについては後述
- ※ -R は、ローカルからリモートへの逆ミラーのオプション
- ※ -v は verbose (饒舌)オプション
verboseオプション
verbose オプションは -vvv (または --verbose=3)のように指定して、ログの饒舌度合いを調整できます。 0-3までの範囲で指定できて、0 は何もログを出さない。
ステップ2
以下のコマンドで、 現在のディレクトリにある www を ftp.foobar.jp の ~/www と同期できる。
$ lftp -f upload.lftp
lftp の -x や -X オプション
man lftp すると...
-x RX, --exclude RX exclude matching files
-X GP, --exclude-glob GP exclude matching files
- RX is an extended regular expression, just like in egrep(1).
egrep使ったことないので、 just like in egrep といわれましても・・・ とりあえず、拡張正規表現ということは、正規表現が使えるということだと思う。
- GP is a glob pattern.
glob の意味がわかりません。
- globをgoogleのdefineで検索*
In computer programming, the verb glob or globbing is used to refer to an instance of pattern matching behavior. The noun glob is sometimes used to refer to a particular pattern, e.g. "use the glob *.log to match all those log files".
要するにbashなどでよく指定しているように、
$ ls *.txt
とすると、カレントディレクトリの txt 拡張子を持つファイルを全部指定できる、という パターン指定のことのようです。
以上から...
- .svn/ を除外
- class,psd,txt 拡張子を持つファイルを除外
- Makefile というファイル名のファイルを除外
した上で、www 以下全部をリモートにミラーする場合は、以下のようになります。
mirror -Rv -X .svn/ -X *.class -X *.psd -X *.txt -x Makefile www/
実際は、-X Makefile でもいけるのかもしれないが、試していない。