保留原始文件信息(创建时间等)的同时复制文件

7
为了方便手动复制大量文件,我经常使用FreeFileSync。我注意到它会保留原始文件信息,例如文件创建时间、最后修改时间等。
现在我需要定期批量复制大量文件,并希望用R完成。所以我想知道R是否也能保留这些信息。据我所知,file.rename()file.copy()会改变文件信息,例如将时间设置为实际复制文件的时间。
有没有办法在文件被复制后恢复原始文件信息呢?

你的操作系统是什么? - Matthew Plourde
在类Unix操作系统中,您可以使用rsync -acp -a甚至是tar(R中有taruntar命令,因此它也可能适用于Windows)。 - Vincent Zoonekynd
1
好问题。在 Windows 上使用 rsync(例如,带有 Rtools)似乎不支持“扩展属性”-X选项,该选项保留其他操作系统上的文件创建时间。我看到的最接近的方法是使用zip(),然后使用unzip(...,setTimes=TRUE)。但这并不是完美的替代品。由于某种原因,它似乎会改变一些时间 1 秒,并需要更多关注当前工作目录、目标目录等。 - Josh O'Brien
file.rename() 可以保留修改日期和创建日期(至少在我使用 Win7 64 位系统时是这样的)。出于这个原因,我使用 file.rename() 而不是 file.copy()。但显然你不能用它来复制,只能重命名或移动文件。 - Chris Holbrook
@ChrisHolbrook:对,我忘了明确说明我是要从一个驱动器复制文件到另一个驱动器。 - Rappster
显示剩余3条评论
1个回答

1

通过 system2() 运行 Robocopy,可以保留时间戳。

> cmdArgs<- paste( normalizePath( file.path(getwd()), winslash="/"),
 normalizePath( file.path(getwd(), "bkup"), winslash="/" ),
  "*.txt",
 "/copy:DAT /V" )
> system2( "robocopy.exe", args=cmdArgs )

Robocopy有许多开关可用于不同类型的用例,并且可以接受“作业”文件以获取参数和文件名。R调用系统的能力也可以用于执行提升的会话(可能最简单的方法是使用PowerShell脚本调用Robocopy),以便保留所有审核信息(权限等)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接