[R] Bug (?): file.copy() erases 'from' file if the "to" file already exists and is a symlinked file

peter dalgaard pd@|gd @end|ng |rom gm@||@com
Fri Sep 13 15:28:32 CEST 2019


However, notice that cat doesn't protect you in the same way:

Peters-iMac:tst pd$ echo stuff > A
Peters-iMac:tst pd$ ln -s A B
Peters-iMac:tst pd$ ls -l
total 8
-rw-r--r--  1 pd  staff  6 Sep 13 15:20 A
lrwxr-xr-x  1 pd  staff  1 Sep 13 15:20 B -> A
Peters-iMac:tst pd$ cp A B
cp: B and A are identical (not copied).
Peters-iMac:tst pd$ ls -l
total 8
-rw-r--r--  1 pd  staff  6 Sep 13 15:20 A
lrwxr-xr-x  1 pd  staff  1 Sep 13 15:20 B -> A
Peters-iMac:tst pd$ cat A > B
Peters-iMac:tst pd$ ls -l
total 0
-rw-r--r--  1 pd  staff  0 Sep 13 15:20 A
lrwxr-xr-x  1 pd  staff  1 Sep 13 15:20 B -> A

(& I suspect that cp did likewise in early Unices). Bug or not, it would be good if we could detect when "from" and "to" refer to the same file, but I'm not sure how to do that.

-pd

> On 13 Sep 2019, at 11:56 , Marc Girondot via R-help <r-help using r-project.org> wrote:
> 
> If file.copy() is used to replace a symlinked file, it erases the original file and does not copy the file. The original file is lost.
> 
> > version
> ???????????????????????????? _
> platform???????????? x86_64-apple-darwin15.6.0
> arch???????????????????? x86_64
> os???????????????????????? darwin15.6.0
> system???????????????? x86_64, darwin15.6.0
> status???????????????? Patched
> major?????????????????? 3
> minor?????????????????? 6.1
> year???????????????????? 2019
> month?????????????????? 09
> day?????????????????????? 06
> svn rev?????????????? 77160
> language???????????? R
> version.string R version 3.6.1 Patched (2019-09-06 r77160)
> nickname???????????? Action of the Toes
> 
> #########################
> 
> Here is a reproducible example:
> 
> A <- 10
> save(A, file="A.Rdata")
> file.symlink(from="A.Rdata", to="B.Rdata")
> rm(A)
> 
> load(file="B.Rdata")
> print(A)?????????????????????? # Perfect
> 
> system("ls -l")
> ## -rw-r--r--?? 1 marcgirondot?? staff?????????? 70 13 sep 11:44 A.Rdata
> ## lrwxr-xr-x?? 1 marcgirondot?? staff???????????? 7 13 sep 11:44 B.Rdata -> A.Rdata
> 
> file.copy(from="A.Rdata", to="B.Rdata", overwrite = TRUE)
> 
> system("ls -l")
> ## -rw-r--r--?? 1 marcgirondot?? staff???????????? 0 13 sep 11:44 A.Rdata
> ## lrwxr-xr-x?? 1 marcgirondot?? staff???????????? 7 13 sep 11:44 B.Rdata -> A.Rdata
> 
> ###############
> 
> A.Rdata becomes empty: 0B
> The content of A.Rdata is lost
> 
> ################
> In terminal the problem does not occur
> ################
> 
> marcgirondot$ ls
> A.Rdata
> marcgirondot$ ln -s A.Rdata B.Rdata
> marcgirondot$ ls -l
> -rw-r--r--?? 1 marcgirondot?? staff?????????? 70 13 sep 11:38 A.Rdata
> lrwxr-xr-x?? 1 marcgirondot?? staff???????????? 7 13 sep 11:38 B.Rdata -> A.Rdata
> marcgirondot$ cp A.Rdata B.Rdata
> cp: B.Rdata and A.Rdata are identical (not copied).
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com



More information about the R-help mailing list