🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.net.ftp
Article #4

Re: ftpでローカルディレクトリをサーバにミラーするツール

#4
From: Seiichi Namba
Date: Sat, 24 Nov 2001 05:34
103 lines
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-mail
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>

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