[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00279] Re: a problem with recursive copy



At Sun, 23 May 2004 03:21:41 +0900,
Takashi SHIRAI wrote:
>  directory 構成は余り関係なくて、destination path 指定時に
> 「/」を suffix すると常に生じる支障のようです。
>  trace してみると「/tmp/bar/baz」ではなく「/tmp/ar/baz」を
> 作ろうとしていますね。「tmp」の後ろの「/」が「bar」の先頭を
> 上書きしたといった感じ。
> 
>  脳書きはともかく patch です。

 直っているのを確認しました。

> >  末尾に / を付けるのはまったく正しい記法だし、既存のディレクトリを
> > 補完したときも末尾に / が付くので、これは対処の必要があると思います。
> 
>  system call 的には path delimiter の「/」は幾つ重複してい
> ても構わなくて、特に指し示す path が file ではなく directory
> の時には任意の「/」を suffix 出来るという仕様が多いと思いま
> す。
>  確か POSIX 的にもそれで正しかったかと思いますが、この仕様
> が通用しない環境がどこかにあって、FDclone ではそういう環境を
> 考慮した実装にしてあった記憶があります。
>  それで、pathname を評価する際には重複する「/」を uniq して
> る処理が入ってるんですが、suffix の「/」に対する処理の方は甘
> かったみたいですね。

 末尾の / の扱いは OS やコマンドによってまちまちだったりして
厄介ですね。たとえば BSD 系 OS や Solaris の cp は

	cp -r dir1 dir2

と

	cp -r dir1/ dir2

では意味が違い、前者は dir2/dir1 にコピーされますが、後者は
dir1 の下のファイルが dir2 直下にコピーされますね。scp や
rsync もこれに準じた仕様になっています。(ただ、 rm -r dir1/ は
dir1 ごと消すので、一貫性がないような気もする)

 一方、 GNU cp などは末尾の / を無視するので両者は同じ結果に
なりますね。

 POSIX でも、せっかく実装依存の -r に加えて -R を新設したのに、
末尾の / の扱いは規定していないようです。


 結局、混乱したくないのでどこでもローカルファイルのコピーに
scp や rsync を使っちゃったり…。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"It seems to me as we make our own few circles 'round the sun
          We get it backwards and our seven years go by like one"