Копировать файлы с сохранением исходной информации о файле (время создания и т. д.)

Чтобы упростить ручное копирование больших объемов файлов, я часто использую FreeFileSync. Я заметил, что он сохраняет исходную информацию о файле, например, когда файл был создан, последний изменен и т. д.

Теперь мне нужно регулярно копировать тонны файлов в пакетном режиме, и я хотел бы делать это в R. Поэтому мне стало интересно, способен ли R сохранять и эту информацию. AFAIU, file.rename() и file.copy() изменяют информацию о файле, например. время установлено на время фактического копирования файлов.

Можно ли как-нибудь восстановить исходную информацию о файле после того, как файлы были скопированы?


person Rappster    schedule 12.06.2013    source источник
comment
Какая у вас операционная система?   -  person Matthew Plourde    schedule 12.06.2013
comment
В Unix-подобных операционных системах вы можете использовать rsync -a, cp -a или даже tar (в R есть команды tar и untar, поэтому они могут работать и в Windows).   -  person Vincent Zoonekynd    schedule 12.06.2013
comment
@MatthewPlourde: извини, забыл. Это Windows 7 (64-битная)   -  person Rappster    schedule 12.06.2013
comment
@VincentZoonekynd: спасибо, я посмотрю на них   -  person Rappster    schedule 12.06.2013
comment
Хороший вопрос. rsync в Windows (который, например, поставляется с Rtools), похоже, не поддерживает опцию расширенных атрибутов -X, которая сохраняет время создания файла в других ОС. Самое близкое, что я вижу, это использовать zip(), а затем unzip(..., setTimes=TRUE). Хотя это не идеальная замена. Кажется, что по какой-то причине он меняется несколько раз на 1 секунду и требует большего внимания к текущему рабочему каталогу, целевому каталогу и т. Д.   -  person Josh O'Brien    schedule 13.06.2013
comment
@JoshO'Brien: спасибо за информацию, особенно за указатель на rsync в Windows!   -  person Rappster    schedule 13.06.2013
comment
file.rename() сохраняет дату изменения и дату создания (по крайней мере, для меня на 64-разрядной версии Win7). По этой причине я использую file.rename() вместо file.copy(). Но, очевидно, вы не можете использовать его для копирования, просто переименовать или переместить.   -  person Chris Holbrook    schedule 13.06.2013
comment
@ChrisHolbrook: да, я забыл явно указать, что я после копирования файлов с одного диска на другой   -  person Rappster    schedule 14.06.2013


Ответы (1)


Robocopy через system2() может сохранять метки времени.

> 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), чтобы вся информация аудита (разрешения и т. д.) также могла быть сохранена. .

person Thell    schedule 17.06.2013