Article View: fj.net.ftp
Article #4Re: ftpでローカルディレクトリをサーバにミラーするツール
From: Seiichi Namba
Date: Sat, 24 Nov 2001 05:34
Date: Sat, 24 Nov 2001 05:34
103 lines
6241 bytes
6241 bytes
難波です。少し補足します。dired-dd の修正があるので、fj.sources 足しました。
Seiichi Namba <sn@asahi-net.email.ne.jp> writes:
> dired で ! (dired-do-shell-command) などを使えば rm -rf は可能です。
>
> emacs-19.x だと駄目みたいですが、emacs-20.7 と emacs-21.1 では可能でした。
> xemacs はもう動かしてないので判りません。
>
> /user@otherhost:/home/user などを C-x d で開いて色々試してみてください。
補足すると、emacs-21/20 の ! (dired-do-shell-command) は rsh 経由で
そのコマンドを実行します。したがって、ftp だけではなく、そのホストに
rsh できないとこの ! による rm -rf は機能しません。
> なお、拙作の dired-dd (http://www.asahi-net.or.jp/~pi9s-nnb/dired-dd-home.html)
> では drag-and-drop で (ange-)ftp できます。
忘れてましたが、dired-dd では [mouse-3] でメニューを出すと、
"Delete Recursive" というアイテムがあり、これで rm -r を実行できる
ようになっています。
この "Delete Recursive" アイテムをさっき調べたら、上の ange-ftp 経由の
機能を利用しておらず remote ftp directory の再帰的削除ができないように
なっていたので修正しました。
この記事の最後に修正すべき関数 dired-dd-delete-recursive を書いておきます
(テストはまだ充分ではないかもしれません)。
この修正を含む本体は近日中に dired-dd-0.9.1.23 として出します。
> 実は dired-dd には "cp -a" でツリーごとコピーする機能があるのですが、
> 最近まで私は上の ! (dired-do-shell-command) のことを知らなくて、
> ローカルのファイルシステムにしか使えない、などとドキュメントに
> 書いてあったりしますが、もしかしてこれは動くようにできるのかしらん…。
>
> たぶん、あのままじゃ駄目だと思うけど、あとでこれも調べてみよう。
調べてみましたが、この remote/local、local/remote 間の cp -a (rcp -r)
相当の処理の方は(今の)dired-dd ではできません。
上の dired-do-shell-command の機能を利用すればこれもなんとかサポートで
きるような気もしますが、drag-and-drop の ((r)cp の) 場合は双方向の処理
があって、local directory と remote ftp directory の間でこれを行なうに
は少し細工が要りそうです(コピーの方向によってやる事が違う?)。
したがって、この再帰的コピーの方は、dired-dd-0.9.1.23 よりも先になりそ
うです。あるいは面倒くさくなって止めるかもしれませんが、やはり出来れば
便利でしょうね。
> lftp は proftpd 相手とかだと、upload 方向の動作がうまくいかないことが
> ありましたが、これもその関係かしら。私は
>
> set passive off
>
> にしています。今 2.4.6 を使っているので、後程 2.4.7 を試してみます。
こっちはまだ試していません。
;; 以下 dired-dd-delete-recursive の修正。dired-do-shell-command を
;; 用いるようにしただけです。emacs-19 系では機能しません(警告すべき?)。
(defun dired-dd-delete-recursive (fn-list)
(when (yes-or-no-p
(format
"Delete these files or directories recursively ?\n %s" fn-list))
(cond
;; Sat Nov 24 13:55:57 2001
;; Must do it via dired-do-shell-command (via ange-ftp)
((eq 'ange-ftp-hook-function
(find-file-name-handler (car fn-list) 'shell-command))
(dired-do-shell-command
(concat dired-dd-delete-recursive-command " "
(mapconcat 'identity dired-dd-delete-recursive-options " "))
current-prefix-arg
(mapcar 'file-name-nondirectory fn-list)
))
;; On local files (directories).
(t
;; Sometimes process is left `run' in emacs-20.2. Why? Use 'sync
;; (dired-dd-shell-command dired-dd-shell-rm-R-command fn-list 'sync)
(condition-case nil
;; Tue Oct 24 09:30:07 2000 revert-buffer() added to manage to
;; show `to' window's current status (not so perfectly,
;; especially when "cp -a"ing huge file(s)). Now this
;; call-process() async-executes "cp -a" with `nil 0 nil'
;; flags. I don't know why `nil nil nil' won't work as I
;; intended.
(prog1
(apply 'call-process dired-dd-delete-recursive-command
nil 0 nil (append
dired-dd-delete-recursive-options fn-list))
(sit-for 0.1))
(error
(error "Command failed: %s"
(concat dired-dd-delete-recursive-command " "
(mapconcat 'identity
dired-dd-delete-recursive-options " ")))))
(message "Hit `g' if target dired buffer doesn't look right.")))
(revert-buffer)))
Technical Details
Message-ID:
<9tnbgj$lm9$2@sn.asahi-net.email.ne.jp>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!nntp.cs.ubc.ca!news.ksw.feedmania.org!newsfeed.mesh.ad.jp!newsfeed2.kddnet.ad.jp!nf.asahi-net.or.jp!not-for-mailReferences:
<9tdn83$lr$1@nn-tk104.ocn.ad.jp> <9tfq83$m3k$1@news.firstserver.ne.jp> <9tlbbn$424$1@nn-tk105.ocn.ad.jp> <9tloqv$97u$1@sn.asahi-net.email.ne.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 10160c,3b3a32791a97a095,start X-Google-Attributes: gid10160c,public X-Google-Thread: 1097d7,b1aeebc13aeebd52 X-Google-Attributes: gid1097d7,public X-Google-Thread: ff358,f06f17bdf31e07c1 X-Google-Attributes: gidff358,public X-Google-Thread: faae6,b1aeebc13aeebd52 X-Google-Attributes: gidfaae6,public X-Google-ArrivalTime: 2001-11-23 21:36:18 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!nntp.cs.ubc.ca!news.ksw.feedmania.org!newsfeed.mesh.ad.jp!newsfeed2.kddnet.ad.jp!nf.asahi-net.or.jp!not-for-mail From: Seiichi Namba <sn@asahi-net.email.ne.jp> Newsgroups: fj.net.ftp,fj.questions.unix,fj.editor.emacs,fj.sources Subject: Re: ftpでローカルディレクトリをサーバにミラーするツール Date: 24 Nov 2001 14:34:07 +0900 Organization: Smoke Message-ID: <9tnbgj$lm9$2@sn.asahi-net.email.ne.jp> References: <9tdn83$lr$1@nn-tk104.ocn.ad.jp> <9tfq83$m3k$1@news.firstserver.ne.jp> <9tlbbn$424$1@nn-tk105.ocn.ad.jp> <9tloqv$97u$1@sn.asahi-net.email.ne.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 8bit Lines: 103 NNTP-Posting-Host: g035081.ppp.asahi-net.or.jp X-Trace: 1006580176 news3.asahi-net.or.jp 2299 211.132.35.81 X-Complaints-To: ap-net@asahi-net.or.jp