高津@ドーガです。

記事 <YAS.05Mar29233353@kirk.is.tsukuba.ac.jp> で
        Yasushi Shinjoさんは書きました

> ftp (クライアント)のコマンドに glob というのがありますよね。
> それで、glob するかしないかのトグルになっています。mput,
> mget, mdelete など m がつくもので。逆に、m が付かないなら、
> もともとは、glob してはいけないということかなあ。

ftpクライアントのソースをちょっと見てみたのですが、glob はクライアント側の
設定を変えるコマンドで、mget・mput のglob展開はローカルでやってますね。
mget なんかは、クライアント側で
・NLST でファイル一覧を取る
・globに合うファイル群を抽出する
・個々のファイルをgetする
といったコードになってます。


私が出くわした問題は、mのつかない get、put で発生するものです。
おそらく delete、rmdir、mkdir、などでも同じことになるかと思います。

でもって、get/putで、クライアント側でローカルのファイル名については
glog展開しないので、例えば、

> put test?.txt
を実行した場合、
・ローカル側には'test?.txt'という名前のファイルが存在する必要がある
・リモート側に存在する test?.txt にマッチするファイル数によって
 ・0個の場合→     'test?.txt'という名前でアップロードされる
 ・1個の場合→     そのファイル名でアップロード(上書き)される
 ・2個以上の場合→ エラーになる
という挙動になります。

以下、実行例です。(無駄なメッセージは削除してます)


% uname -a
FreeBSD eden.4koma.jp 5.1-RELEASE FreeBSD 5.1-RELEASE #2: Tue Jul 22 01:14:36 JST 2003     taka2@eden.4koma.jp:/usr/src/sys/i386/compile/koma4  i386
% touch 'test?.txt'
% ls
test?.txt
% ftp localhost

・リモート側にマッチするファイルが0個の場合
ftp> cd ftptest/test0
ftp> ls
150 Opening ASCII mode data connection for '/bin/ls'.
226 Transfer complete.
ftp> put test?.txt
local: test?.txt remote: test?.txt
150 Opening BINARY mode data connection for 'test?.txt'.
ftp> ls
-rw-r--r--  1 taka2  wheel  0 Mar 30 10:39 test?.txt


・リモート側にマッチするファイルが1個だけある場合
ftp> cd ../test1
ftp> ls
-rw-rw-r--  1 taka2  wheel  0 Mar 30 10:34 test1.txt
ftp> put test?.txt
local: test?.txt remote: test?.txt
150 Opening BINARY mode data connection for 'test1.txt'.
ftp> ls
-rw-rw-r--  1 taka2  wheel  0 Mar 30 10:39 test1.txt


・リモート側にマッチするファイルが2個ある場合
ftp> cd ../test2
ftp> ls
-rw-rw-r--  1 taka2  wheel  0 Mar 30 10:34 test1.txt
-rw-rw-r--  1 taka2  wheel  0 Mar 30 10:34 test2.txt
ftp> put test?.txt
local: test?.txt remote: test?.txt
229 Entering Extended Passive Mode (|||54483|)
550 ambiguous
ftp>


PROJECT TEAM DoGA 高津正道                            taka2@doga.jp
                                                   TBD00456@nifty.ne.jp
                     PROJECT TEAM DoGAのホームページ → http://doga.jp/
3月30日(水) 今日のマーフィーの法則    [カーリンシーの定義]
バスとは、自分が待っているのと反対側の車線を、行きたい方向と逆に走る乗物である。