Перемещение папки между дисками в NTFS и сохранение временных меток

Извините, я знаю, это звучит как вопрос новичков. Но серьезно, я опытный разработчик, и я понимаю, что Windows 7 Pro 64-бит и тому подобное скажут: "О, если вы перемещаете дерево NTFS с одного диска на другой, когда я пишу файлы с детьми, что на самом деле означает что я изменяю родительскую папку, чтобы обновить ее временную метку". Таким образом, я завершаю все файлы назначения, имеющие те же временные метки, что и оригинал, но все папки имеют одинаковую только что обновленную дату и время.

Итак, я понимаю, что происходит. И я знаю, что могу написать свою собственную утилиту (у меня есть) для копирования/перемещения файлов на NTFS. Но утилиты рискованны - если они не поддерживают NTFS, они могут игнорировать другие свойства или пропускать такие вещи, как NTFS Alternate Data Streams (ADS) и т.д.

Значит, кто-нибудь знает хорошую утилиту для переноса дерева, поддерживающую NTFS, которая просто переместит все дерево и сохранит временные метки? Я не хочу рисковать потерять что-либо. Спасибо.

Ответ 1

Подчеркнув ответ Хельге Клейна, я более внимательно посмотрел на Robocopy. Оказывается, Robocopy (последние версии, такие как Windows 7), может дублировать временную метку скопированной структуры папок. Существует также опция "move", которая удаляет исходный каталог после копирования, но в Microsoft бесконечная мудрость это несовместимо с параметром "сохранить временную метку каталога", поэтому вам придется удалить исходное дерево после выполнения копии.

Параметры аргументов командной строки сложны. Я немного изучил, и основная команда для копирования сохраненных временных меток каталога с помощью Robocopy:

robocopy %1 %2 /e /dcopy:T

... где %1 - исходный каталог, а %2 - целевой каталог.

Если вы хотите, чтобы вы копировали все, включая разрешение безопасности NTFS, владельца и аудита, укажите, что все атрибуты должны быть скопированы и использовать режим резервного копирования, например:

robocopy %1 %2 /b /e /copyall /dcopy:T

Однако использование этих дополнительных параметров потребует полных прав администратора (а не только учетной записи администратора). Например, нажмите Начать, щелкните правой кнопкой мыши Командная строка, а затем выберите Запустить от имени администратора. Затем введите приведенную выше команду.

P.S. Я проверил, что Robocopy также передает потоки NTFS.

Ответ 2

Я собирался рекомендовать robocopy, но когда я попробовал сценарий, я обнаружил (к моему большому удивлению), что он оставляет скопированные каталоги в новые даты, как описано вами.

Total Commander, с другой стороны, также копирует временные метки каталогов.

Ответ 3

SynchronizeIt делает это так же хорошо, как Robocopy с приятным графическим интерфейсом, и возможность легко видеть и выбирать, какие файлы будут скопированы. http://www.grigsoft.com/wndsync.htm

(Остерегайтесь, однако, есть чрезвычайно редкие случаи, когда этот инструмент каким-то образом искажает файлы назначения - это случилось со мной с файлами, загруженными менеджерами загрузки, в частности FlashGet и Orbit Downloader, только первые 25kb были правильно скопированы, остальная часть была заполнена с нулями, я не знаю объяснений. Я видел, что Robocopy терпит неудачу в одинаково редких случаях - он был смущен похожими именами файлов, скопировал один файл вместо другого и, таким образом, пропустил другой. ВСЕГДА убедитесь, что копия прекрасна, используя Total Commander или WinMerge.)