Удалять дублирующие файлы из источника, перемещать только отсутствующие цели в Robocopy

2726
Oskar Kjellin

Недавно мы скопировали все наши файлы на новый сервер хранения. Мы не хотели двигаться в то время, потому что мы не были уверены, что файлы будут потеряны.

Проблема в том, что у нас есть файлы в обоих местах.

Как мы можем переместить только те файлы, которые не существуют в цели, а те, которые существуют в обоих местах, мы удаляем из источника? Это Windows Server 2008.

2

5 ответов на вопрос

1
Eric
robocopy OLDDIR NEWDIR /S /XO 

Это оставляет новые файлы только в NEWDIR. Файлы в NEWDIR, которые являются такими же или более старыми, будут перезаписаны.

robocopy OLDDIR NEWDIR /MIR /XO 

Это делает нечто похожее - следите за дополнительным удалением файлов на этом.

Семантика команды / XO обратная.

Я просто создал набор исходных и целевых каталогов и доказал это самому себе, поскольку ни одна документация не объясняет истинное значение «Исключить новее». Новее что? Более новый источник? Новое направление? Какие?

Доказательство:

  1. Сделайте копию.

  2. Отредактируйте файл в NEWDIR, присвоив ему новую отметку времени.

  3. Сделайте копию снова, используя / XO. Новая отметка времени в файле в NEWDIR остается.

  4. Сделайте копию снова, используя / XN. Новая отметка времени в файле в NEWDIR возвращается.

0
R-D

Используйте инструмент сравнения, такой как Beyond Compare. Он может сравнивать папки и показывает, какие файлы существуют и не выходят из папок и подпапок. Кроме того, он показывает, есть ли какие-либо различия между файлами, которые существуют в обоих местах. вне всякого сравнения можно также копировать и / или перемещать файлы из одной папки в другую.

Я закончил тем, что использовал это, поскольку я мог легко сделать это шаг за шагом! Oskar Kjellin 14 лет назад 0
0
Charles Gargent

Используйте инструмент robocopy с ключом / xn. Я считаю, что Server 2008 поставляется с Robocopy в качестве стандарта.

/ XC :: eXclude Измененные файлы.

/ XN :: eXclude Более новые файлы.

/ XO :: eXclude Старые файлы.

/ XX :: eXclude eXtra файлы и каталоги.

/ XL :: eXclude Lonely файлы и каталоги.

/ MOV :: MOVe файлы (удалить из источника после копирования).

/ MOVE :: MOVE файлы и каталоги (удалить из источника после копирования).

так что команда будет что-то вроде

robocopy OLDDIR NEWDIR /MOVE /XN 

это переместит все старые файлы, но не перезапишет новые

Вы всегда можете использовать переключатель / L, чтобы выполнить пробный прогон, это покажет вам, что произойдет, фактически ничего не делая. Некоторые вещи могут отличаться в 2008 году, я использую версию XP.

После небольшого тестирования кажется, что, когда файлы в dest более новые, чем в исходном, он помещает их как более старые? Так может XO? Oskar Kjellin 14 лет назад 0
0
Chris
robocopy %Files% %Bak% /E /ZB /MOVE /IS /COPY:DATSOU 

Not only do you need /MOVE, you need /IS (Include Same) files.

Otherwise Robocopy never copies the file over when it sees the same file is in both locations.

If you tell it to "Include Same" it sees the same file in both locations, and still copies the file over from source anyway, AND deletes it from source like it's supposed to.

0
ordinaryuser

robocopy хорош, но я обнаружил, что опция / move не работает, если файл уже существует в целевой папке. Флаги / IS и / IT предназначены для того, чтобы разобраться с этим, но они не для меня, robocopy просто игнорирует их (ymmv). В качестве обходного пути вы можете создать новый целевой каталог и затем переместить его в основную целевую область после завершения копирования.

Похожие вопросы