Как скопировать только новые или измененные файлы/папки за последний час в Powershell?
Добрый день, подскажите пожалуйста, хочу раз сутки копировать папки и файлы из одной директории в другую, но только те, которые были созданы/изменены за последний час. Т.е. сделать что то вроде дельта синхронизации
Имеется следующая иерарихия
Folder_1
-File_1_1
-File_1_2
Folder_2
-File_2_1
-Folder_2_1
—File_2_1_1
Folder_3
Теперь если вдруг появится новый файл в папке Folder_2_1 или изменится любой другой то они должен будут скопироваться
Делаю таким образом
И вроде способ рабочий, копирует файлы, повторяет иерархию, НО при создании или изменении файлов, меняются также атрибуты папки в которой он находится, и таким образом папка также попадает под эту выборку, и в результате в новое место копируется не только изменившийся файл, но и все файлы в изменившейся папке
А нужно копировать только файлы изменившиеся, и если этот файл находится в определенной папке, то только копировать необходимую иерархию папок, без левых неизменившихся файлов
Robocopy для копирования только новых папок и файлов
Дело в том, что я не хочу создавать все подпапки на целевом диске, если в них нет новых файлов.
Результаты приемлемы, но есть много работы, чтобы просмотреть все папки и найти новые файлы, а также понять, какие подпапки являются новыми
4 ответа 4
Вы можете добавить /S для этого. Вам не нужен \E для копирования пустых каталогов. Вам даже не понадобится \XO который делает \MAXAGE .
Если в каталоге не скопированы файлы, каталог не создается в месте назначения.
Если у вас нет каталогов для исключения, вы можете просто использовать:
Вы можете сделать robocopy /? за всю помощь.
Мои простые команды, которые прекрасно работают:
Объяснение: X:\WEB — моя папка назначения.
Переключатели:
/copy:datso: Определяет свойства файла для копирования:
(d: данные, a: атрибуты, t: метки времени, s: список управления доступом NTFS (ACL), o: информация о владельце)
/mir: отражает дерево каталогов
/ FFT: Предполагается время файла FAT, важно при копировании данных
/ r: 0: количество повторных попыток при неудаче
/ w: 0: время ожидания между попытками 0 секунд
/ secfix: исправляет безопасность файлов для всех файлов, даже пропущенных
/ MT: 20: создает 20 потоков копий
/ xo: Исключает старые файлы — если целевой файл существует и имеет ту же дату или новее, чем исходный — не пытайтесь перезаписать его.
/ xf thumbs.db: Исключая файлы «thumbs.db» (путь), здесь можно использовать дикие символы (например: * .mp3)
/log+:filename.log: записывает вывод состояния в указанный файл журнала.
(добавляет к существующему файлу журнала) или использовать новый журнал просто /log:filename.log
Не этот конкретный случай, но я надеюсь, что это поможет кому-то, когда они будут выполнять миграцию файловых серверов.
Копирование только обновленных файлов
Если команда хсору используется для резервного копирования набора файлов и папок, ее придется регулярно запускать для поддержания актуального состояния резервной копии. В таком случае вряд ли захочется копировать те файлы, которые не были изменены. Чтобы заставить хсору копировать только те файлы, которые новее резервной копии, следует воспользоваться ключом /D. Тем самым будет сэкономлено и время, и сетевой трафик. Нужно будет также добавить ключ /R, чтобы хсору смогла вести запись поверх старых копий файлов с атрибутом «Только чтение». Ключ /Y позволяет хсору вести запись поверх старых файлов без вывода приглашения на подтверждение. Теперь подчиненные папки, но при этом реально копируются только те файлы, которые оказались новее уже скопированных в папку e:backup. Кроме этого сохраняются все атрибуты файлов. Ключ /D выполняет двойную функцию — его можно также использовать для указания даты, и хсору скопирует только те файлы, которые были созданы или изменены в указанный день или позже. Дополнительную информацию по данному вопросу можно найти в интерактивной справке.
Команда хсору не может скопировать файлы, которые используются прикладными программами, она не может также скопировать персональную информацию реестра, принадлежащую тому пользователю, который вошел в систему. Целесообразнее для проведения резервного копирования поместить команды хсору в пакетный файл, запускаемый из Планировщика заданий в то время, когда вероятность нахождения пользователей в системе ниже всего. При этом нужно воспользоваться ключом /С, чтобы заставить хсору продолжать работу даже в случае возникновения ошибок. Если кто-то припозднился и, к примеру, держит открытым файл документа, ключ /С позволяет хсору продолжить копирование других файлов и папок. Например, вы можете написать пакетный файл для копирования всех пользовательских папок Документы (Documents) в сетевую папку с помощью следующей команды: которая работает в Windows 7 и Vista.
XCOPY — описание команды и примеры использования

XCOPY — Копирует файлы и каталоги, включая подкаталоги.
Синтаксис
xcopy источник [результат] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [</a|/m>] [/n] [/o] [/x] [/exclude:файл1[+[файл2]][+[файл3]] [</y|/-y>] [/z]
Параметры
| Параметр | Описание |
|---|---|
| источник | Обязательный параметр. Задает местонахождение и имена файлов для копирования. Параметр должен задавать или диск, или путь. |
| результат | Задает место, куда будут скопированы файлы. Параметр может включать имя диска с двоеточием, имя каталога, имя файла или их комбинацию. |
| /w | Выводит следующее сообщение с ожиданием подтверждения начала копирования: Нажмите любую клавишу, чтобы начать копирование файлов |
| /p | Запрашивает подтверждение при создании каждого файла-результата. |
| /c | Игнорирует ошибки. |
| /v | Проверяет каждый скопированный файл на соответствие его оригиналу. |
| /q | Отменяет вывод на экран сообщений команды xcopy. |
| /f | Выводит имена исходных файлов и файлов-результатов в процессе копирования. |
| /l | Отображает список копируемых файлов. |
| /g | Создает незашифрованные файлы-результаты. |
| /d[:мм-дд-гггг] | Копирует только файлы, измененные не ранее заданной даты. Если не включить значение мм-дд-гггг, команда xcopy копирует все файлы-источники, которые новее существующих файлов-результатов. Эта возможность позволяет обновлять только измененные файлы. |
| /u | Копирует (обновляет) только те файлы-источники, которые уже существуют в каталоге результата. |
| /i | Если источником является каталог или источник содержит подстановочные знаки и результат не существует, команда xcopy считает, что результат — это имя каталога, и создает новый каталог. Затем xcopy копирует все указанные файлы в новый каталог. По умолчанию команда xcopy запрашивает подтверждение, является ли параметр результат каталогом или файлом. |
| /s | Копирует каталоги и подкаталоги, если они не пусты. Если параметр /s не задан, команда xcopy будет работать только с одним каталогом. |
| /e | Копирует все подкаталоги, включая пустые. Параметр /e используется с параметрами /s и /t. /t Копирует только структуру подкаталога (т. е. дерево), а не файлы. Для копирования пустых каталогов следует задать ключ /e. |
| /k | Копирует файлы с атрибутом «только для чтения» с сохранением этого атрибута для скопированных файлов, оригиналы которых имеют этот атрибут. По умолчанию команда xcopy удаляет атрибут «только для чтения». |
| /r | Копирует файлы с атрибутом «только для чтения». |
| /h | Копирует системные и скрытые файлы. По умолчанию команда xcopy не копирует системные и скрытые файлы. |
| /a | Копирует только те файлы, которые имеют установленный атрибут «архивный». При использовании параметра /a атрибут «архивный» у исходных файлов не меняется. |
| /m | Копирует только те файлы, которые имеют установленный атрибут «архивный». В отличие от параметра /a, параметр /m очищает атрибут «архивный» у скопированных файлов. |
| /n | Копирует с использованием коротких имен файловой системы NTFS. Параметр /n требуется при копировании из файловой системы NTFS в файловую систему FAT или когда на диске-результате требуется использование соглашения об именах файлов как в файловой системе FAT (8.3). Файлы могут записываться в файловую систему FAT или NTFS. |
| /o | Копирует сведения о принадлежности файлов и избирательной таблице управления доступом (DACL). |
| /x | Копирует сведения о параметрах аудита файла и системной таблице управления доступом (SACL) (подразумевается наличие /p). /exclude:файл1[+[файл2]][+[файл3]] Определяет список файлов, содержащих строки. |
| /y | Устраняет выдачу запроса на подтверждение перезаписи существующего конечного файла. |
| /-y | Выдает запрос на подтверждение перезаписи существующего конечного файла. |
| /z | Копирует по сети в режиме перезапуска. |
| /? | Отображает справку в командной строке. |
Примечания
-
- Использование параметра /exclude
Построчный вывод всех строк в каждом файле. При соответствии выведенной строки части пути копируемого файла, он исключается из процесса копирования. Например, если указана строка «\Obj\», исключается все файлы, расположенные в каталоге «Obj». Например, если указана строка «.obj», исключается все файлы с расширением .obj. - Использование параметра /z
Если во время фазы копирования теряется сетевое подключение (например, если сервер переходит автономный режим, разрывая подключение), копирование возобновляется после восстановления подключения. Использование параметра /z команды вызывает также отображение доли (в процентах) завершенной операции копирования для каждого файла. - Использование параметра /y в переменной среде COPYCMD. Можно применять параметр /y в переменной среде COPYCMD. Эта настройка может быть переопределена использованием параметра /-y в командной строке. По умолчанию если команда copy выполняется не в пакетной программе, при замене требуется подтверждение.
- Копирование зашифрованных файлов
При копировании файлов на том, не поддерживающий шифрованную файловую систему (EFS), возникнет ошибка. Следует предварительно расшифровать файлы или копировать их на том, поддерживающий EFS. - Добавление файлов
Чтобы объединить файлы, укажите один файл-результат, но несколько файлов-источников (с помощью подстановочных знаков или формата файл1+файл2+файл3). - Значение по умолчанию для результата
Если параметр результат не задан, xcopy будет копировать файлы в текущий каталог. - Указание в качестве результата файла или каталога
Если параметр результат не содержит существующий каталок или не заканчивается обратной чертой(\), выводится следующее сообщение:Что означает destination:
имя файла или каталога
(F = файл, D = каталог)?Нажмите F, если файл или файлы должны копироваться в файл. Нажмите D, если файл или файлы должны копироваться в каталог.Чтобы устранить вывод этого сообщения, используйте параметр /i. В результате чего, команда xcopy предполагает, что результат является каталогом, если источник престаляет собой несколько файлов или каталогов. - Использование команды xcopy для установки атрибута «архивный» для файлов результата
Команда xcopy создает файлы с установленным атрибутом «архивный», независимо от состояния этого атрибута у исходных файлов. - Сравнение команд xcopy и diskcopy
Команда xcopy должна быть использована вместо diskcopy при копировании файлов и подкаталогов на диск другого формата. Так как команда diskcopy копирует диски по дорожкам, требуется, чтобы исходный диск и диск-результат имели одинаковый формат. Для команды xcopy это требование не нужно. Обычно следует использовать команду xcopy, если только не требуется получить два диска с одинаковыми образами. - Коды завершения программы xcopy
Для анализа кодов завершения, выведенных командой xcopy, используйте параметр уровень_ошибки в командной строке if пакетных программ.
В следующей таблице перечислены коды завершения с кратким описанием.
Код завершения Описание 0 Файлы скопированы без ошибок 1 Файлы для копирования не найдены 2 Нажата комбинация CTRL+C для остановки команды xcopy 4 Возникла ошибка инициализации. Недостаточно места в памяти или на диске, введено неверное имя диска или неверный синтаксис вызова команды 5 Диск защищен от записи Примеры использования
Чтобы копировать все файлы и подкаталоги (включая пустые подкаталоги) с диска A на диск B, введите:
Чтобы включить в операцию копирования предыдущего примера системные и скрытые файлы следует использовать параметр /h:
Чтобы обновить файлы в каталоге \Reports файлами из каталога \Rawdata, измененными после 29 декабря 1993 года, введите:
Чтобы обновить файлы предыдущего примера, уже существующие в каталоге \Reports, независимо от их даты, введите следующую команду:
Чтобы получить списк файлов, которые были бы скопированы в предыдущем примере, следует ввести команду:
Список файлов, которые были бы скопированы, находится в файле Xcopy.out.
Чтобы скопировать каталог \Customer и все подкаталоги \\Public\Address на сетевой диск H, сохранить у файлов атрибут «только для чтения», введите команду:
Чтобы выдать предыдущую команду, убедиться, что команда xcopy создает каталог \Address и устранить вывод сообщение о создании нового каталога, добавьте параметр /i следующим образом:
Для запуска программы xcopy и анализа кодов завершения можно создать пакетный файл и использовать оператор if для обработки кодов завершения в случае возникновения ошибок. Например, следующая пакетная программа использует замещаемые параметры для задания источникаxcopy и результата:
Эта пакетная программа может быть использована для копирования всех файлов каталога C:\Prgmcode и его подкаталогов на диск B следующим образом:
Командный интерпретатор подставляет C:\Prgmcode вместо параметра %1 и B вместо параметра %2, затем использует команду xcopy с параметрами /e и /s. Если при выполнении xcopy произошла ошибка, пакетная программа считывает код завершения и переходит на метку, указанную в соответствующей инструкции IF ERRORLEVEL. В результате на экран выводится сообщение о характере ошибки и осуществляется выход из пакетной программы.
- Использование параметра /exclude