[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00279] Re: a problem with recursive copy
- Subject: [FDclone-users:00279] Re: a problem with recursive copy
- From: "Akinori MUSHA" <knu@iDaemons.org>
- Date: Sun, 23 May 2004 06:10:15 +0900
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"