34

На Linux мы можем просто сделать:

cp -pr directory

Как это сделать в Windows? Это можно сделать в проводнике Windows? Любые предложения инструмента GUI?

Было бы лучше, если бы я мог сохранить разрешения NTFS и время создания / изменения / доступа. Как минимум, мне нужно сохранить дату изменения для файлов и каталогов. Копия проводника Windows не сохраняет дату изменения для каталогов.

14 ответов14

19

RoboCopy может сохранить mtime для каталогов с параметром /DCOPY:T, но это работает только в Vista и новее. Это может также сохранить ACL. В качестве альтернативы FastCopy можно настроить для сохранения каталогов mtimes, ACL и ADS.

17

... или вы можете просто сделать zip-архив (с методом сжатия, установленным на "Store"), а затем распаковать файлы, куда вы хотели их скопировать. Атрибуты даты / времени совпадают с исходными файлами.

4

Синхронизируйте это! 3.5 сохраняет все метки времени (файлы и папки, их модификация и создание). Это единственное программное обеспечение, которое я знаю в Windows XP, которое делает это безупречно, кроме Robocopy, и я пробовал много. Однако следует помнить, что он может создавать поврежденные файлы с исходными файлами, загруженными с использованием таких программ, как FlashGet или Orbit Downloader (результирующие файлы имеют одинаковый размер, но фактически копируются только 25 КБ - остальное заполнено нулями). Я спросил создателя программного обеспечения, может ли он выяснить, почему, но он понятия не имел; Я предполагаю, что это связано с загрузкой файлов такого программного обеспечения небольшими пакетами (предназначенными для оптимизации скорости), а мой раздел данных сильно фрагментирован.

Robocopy XP026 действительно включен в Windows Vista, но работает в Windows XP. Ищите "Robocopy XP026", или я могу отправить файл сюда, так как найти его не очень легко. Или вы можете установить Robocopy GUI, а затем выполнить поиск файла robocopy.exe в папке System32, чтобы использовать его из командной строки. У меня есть файл 208 КБ, а номер версии 5.1.2600.26.

Кажется, есть ошибка в "режиме резервного копирования", хотя:

http://msmvps.com/blogs/martinzugec/archive/2008/03/03/ugly-bug-in-robocopy-ignoring-security-on-file-level.aspx

Robocopy версия XP027, по-видимому, больше не имеет этой ошибки, но она не работает в Windows XP.

4

Там нет простого способа сделать это в Windows. Существуют несколько программ, которые утверждают, что могут сохранять дату создания файлов.
Вот несколько программ, которые могут решить эту проблему:http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html.

Просто с помощью проводника Windows это невозможно. Если вы посмотрите на документацию для CopyFile (http://msdn.microsoft.com/en-us/library/aa363851%28VS.85%29.aspx), то увидите, что там написано:
Эта статья должна документировать семантику в отношении времени создания / изменения / доступа к файлу.

Время создания: если целевой файл уже существует, время его создания сохраняется, в противном случае оно устанавливается на текущее системное время.
Время последнего изменения: всегда копируется из времени изменения исходного файла.
Время последнего доступа: всегда установлено текущее системное время.

3

RoboCopy должен быть в состоянии сделать это с помощью переключателя COPYALL. Вы можете получить версию GUI от Microsoft Technet.

2

Инструмент командной строки Robocopy (поставляется с большинством версий Windows)
На моем компьютере с Windows 10 он находится в C:\Windows\System32

Из Википедии его можно использовать со следующим набором параметров для сохранения временных меток файлов и каталогов, а также других атрибутов:

Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPYALL /E /R:0

  • /DCOPY:T сохранить временные метки оригинальных каталогов (требуется версия XP026 или новее)
  • /E: рекурсивно копировать каталоги, включая пустые каталоги
  • /R:0: не повторять попытки заблокированных файлов (по умолчанию количество повторных попыток при сбойных копиях равно 1 миллиону),

  • /COPYALL: копировать всю информацию о файле,
    (эквивалентно /COPY:DATSOU , где

    • D = данные,
    • A = атрибуты,
    • T = метки времени файла ,
    • S = Безопасность = NTFS ACL,
    • O = Информация о владельце,
    • U = информация аудита),

Если вы хотите сохранить только метки даты и времени каталога, но не хотите копировать пустые подкаталоги и не хотите сохранять другие атрибуты, вы можете использовать:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

где /S копирует непустые подкаталоги

Чтобы увидеть полный синтаксис, введите robocopy /? в командной строке или посмотрите на эти сообщения в блоге: https://ss64.com/nt/robocopy.html и https://techjourney.net/robocopy-syntax-command-line-switches-and-examples/

Пример команды, которую я недавно выполнил:
Robocopy D:\ C:\D_backup /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

Обратите внимание, что исключение 2 подкаталогов требует, чтобы флаг /XD использовался дважды. Кроме того, второе исключение каталога использует кавычки, потому что в имени каталога есть пробелы.

Наконец, вы можете добавить флаг /L чтобы проверить команду, прежде чем делать это по-настоящему. Таким образом, вы можете убедиться, что он не будет копировать (или удалять) любые каталоги / файлы, которые вам не нужны, и что в вашей команде нет ошибок.

Редактировать: поймал при копировании из корневого каталога (он же диск) в папку (не корневой каталог)

После запуска приведенной выше команды, каталог не был виден! (Несмотря на то, что show hidden files и show system files были проверены в Windows 10!) Следующая команда согласно https://serverfault.com/a/455029/399723 исправила это:

attrib -h -s C:\D_backup

В качестве альтернативы, добавление /A-:SH "удаляет скрытый атрибут из системных файлов", что, в свою очередь, может помешать скрытию каталога, в соответствии с https://serverfault.com/a/565804/399723. Смотрите также https://ss64.com/nt/robocopy.html.
Это обсуждение проливает больше света на этот вариант в качестве решения.

Robocopy D:\ C:\D_backup /A-:SH /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

Другое программное обеспечение:

Кроме того, вы можете загрузить версию robocopy с графическим интерфейсом, если вы не хотите использовать командную строку.

Другая утилита для Windows - это XCopy, хотя она включена в Windows 10, но она устарела. Смотрите ссылку для получения.

На странице Википедии для RoboCopy (ссылка вверху этого поста) перечислены другие программы, которые можно использовать.

1

FastCopy может сделать это, и это бесплатно.

1

я обнаружил, что самый простой способ для меня до сих пор - это метод "отправить". без необходимости каких-либо внешних приложений. по моему опыту, он сохраняет все исходные атрибуты файла. метод, который я использовал прежде, был методом папки сжатия / почтового индекса. хотя это, безусловно, займет больше времени, поскольку файлы не только копируются, но и обрабатываются и сжимаются, как при сжатии, так и при распаковке.

% appdata%\Microsoft\Windows\SendTo или C:\Users _______\AppData\Roaming\Microsoft\Windows\SendTo

добавьте ярлык в папку, куда вы хотите их скопировать, и элемент появится в вашем меню sendto, когда вы щелкните правой кнопкой мыши файл, который хотите скопировать

1
xcopy *.* C:\temp\Pics /c /d /e /h /i /k /q /r /s /x /y

Я не уверен, какой переключатель поддерживает дату файла, но это работает. Затем я заархивирую каталог C:\temp\Pics, в котором также хранятся даты файлов, как упоминалось ранее.

0

Я достигаю этого с

rsync -avu --modify-window = 3602 исходный_каталог / целевой_каталог /

(это действительно используется в качестве инструмента синхронизации из одного каталога в другое зеркало, и опция временного окна - предотвращение проблем, когда системы Windows перемещают часы на 1 час для перехода на летнее время и т. д. по сравнению с системами Linux)

в среде Cygwin внутри Windows или в виртуальной машине Linux внутри Windows с установленными дисками Windows (например, с VirtualBox)

NB cygwin и virtualbox являются бесплатными и позволяют вам в большей или меньшей степени использовать функциональность linux в windows - они оба требуют небольшой настройки - особенно virtualbox, но имеют много преимуществ ....

Моя собственная проблема заключалась в том, что файлы имеют правильное время, а каталоги - нет. rsync отсортировал даты в каталогах, а также даты в файлах.

0

xcopy отлично работает для этого. Просто укажите флаг /k для копирования атрибутов.

Синтаксис
xcopy Source [Destination] [Необязательные параметры]

Команда xcopy может копировать один или несколько файлов или деревьев каталогов из одного места в другое. Команда xcopy включена во все версии Windows от Windows 95 до Windows 8.

0

Эта команда копирует ту же метку времени для файлов. Обратите внимание, что это не делает точно такое же время для самих папок. Также обратите внимание, что я поместил кавычки вокруг источника (Temp1) и места назначения (Temp2). Это делается в том случае, если в путях есть пробелы. У меня нет пробелов, но я подумал, что должен включить его в худших случаях.

robocopy /E /copy:DAT "C:\Temp1" "c:\Temp2"

Чтобы сохранить временные метки для папок также:

robocopy /E /copy:DAT /dcopy:DAT "C:\Temp1" "c:\Temp2"

0

Простой способ перемещения папок и сохранения даты создания и времени использования этих утилит

http://lantechsoft.com/data-copy.html

Еще один, где он может сохранить даты при копировании файлов.

http://technocomsolutions.com/data-copy-tool.html

0

Перемещать папки и каталоги просто, сохраняя дату создания. Просто удерживайте Shift и перетащите папку на новое место (команда перемещения). Дата изменения будет текущей датой, а дата создания будет сохранять первоначальную дату.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .