Содержание:
Когда вам нужно скопировать файлы на другой диск, вы обычно также используете обычный процесс выбора, копирования и вставки. Хотя этот процесс работает отлично, скорость становится узким местом, когда попытка передачи большого количества файлов может занять очень много времени. В этой статье мы поговорим о том, как использовать многопоточность Robocopy в Windows 10. Начнем!
Что ж, в качестве альтернативы многие технически подкованные пользователи используют Robocopy (надежное копирование файлов). Это инструмент командной строки, встроенный в Windows 10, который предоставляет больше возможностей для более быстрого перемещения данных в другое место.
Одна особенность, которая делает Robocopy таким особенным (и в основном упускаемым из виду), — это многопоточная функция, которая дает вам разрешение на одновременное копирование нескольких файлов. Вместо одного файла за раз с помощью функции копирования, встроенной в проводник.
В этом руководстве вы, ребята, научитесь использовать функцию многопоточного копирования в Robocopy. Чтобы ускорить процесс передачи файлов и папок на другой диск в Windows 10.
Параметры :
: обязательный параметр. Определяет расположение и имена файлов которые вам нужно скопировать. Данный параметр должен включать устройство или путь.
: Опеределяет место назначения копируемых файлов. Может включать в себя букву диска с двоеточием, имя директории, имя файла, или комбинацию их.
/w : отображает сообщение «Press any key to begin copying file(s)» и ждет вашего ответа прежде чем начать копирование файлов.
: будет выдавать запрос перед созданием каждого файла.
: игнорирование ошибок.
: проверяет каждый файл после их записи на идентичность исходным. В Windows XP он не используется. Оставлен для совместимости с MS-DOS файлами
: тихий режим. Не выводит сообщения во время работы.
: отображает имена файлов при копировании.
: отобразить имена файлов которые будут копироваться.
: Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.
: копировать файлы которые изменены позже указаной даты, включаю указанную. Если не указать значение mm-dd-yyyy (месяц-день-год), xcopy будет копировать файлы которые более новые чем в папке назначения. Вообщем эта команда позволяет обновить файлы, которые изменились.
: копировать только те файлы которые уже есть в папке назначения. Т.е. обновить их.
: если это директория или содержит wildcards ( ну типа * ) и не указан, то xcopy предполагает что это директория и создает ее. По умолчанию xcopy запрашивает у вас это директория или файл.
: директории и поддиректории в которых нет файлов будут пропущены. Если опустить этот параметр, xcopy работает внутри одной директории.
: копировать все поддиректории, даже если они пустые. Эквивалентен сочетанию ключей . Совместим с ключом .
: Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей .
: при копировании сохраняется атрибут «только для чтения». По умолчанию он сбрасывается.
: перезапись файлов, предназначенных только для чтения.
: копировать скрытые и системные файлы. По умолчанию xcopy не копирует эти файлы.
: копировать файлы у которых имеется атрибут архива. Сам атрибут при этом сохраняется. Для установки этого атрибута можно использовать команду attrib.
: почти тоже что и с ключем , только в данном случае атрибут архива будет сбрасываться у исходных файлов.
: делает имена файлов и папок короткими. Может понадобиться в случае копирования с FAT на NTFS. Потомучто FAT ( 8.3 символа ) не поддерживает длинные имена как NTFS.
: копируется информация о пользователе файла и информация DACL (discretionary access control list).
: копирование параметров аудита файлов и информация SACL (подразумевает ключ ).
… : список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.
: чтобы не спрашивал когда нужно перезаписать уже существующий файл.
: противоположность ключу .
: копировать по сети в возобновляемом режиме.
: вывести помощь. Подсказки по параметрам команды.
Некоторые особенности жестких ссылок Windows
Изучая свойства жестких ссылок в Windows, обнаружил следующее:
— Изменения в правах доступа к файлу видны сразу во всех жестких ссылках на этот файл, а время изменения файла — не сразу во всех.
— Когда изменяем содержимое файла, то время изменений обновляется сразу только у той жесткой ссылки из которой эти изменения производились.
— Измененные атрибуты файла ведут себя так же как и время изменения файла (см. выше).
— Если изменить содержимое файла (например находящегося в папке «куда»), используя внешнюю жесткую ссылку на этот файл, то программа Robocopy в некоторых случаях может этого не увидеть, т.к. например время изменения файла обновилось только в той внешней ссылке, через которую он был изменен.
— Если измененный через внешнюю жесткую ссылку файл просто открыть или просто просмотреть его свойства через не затронутую ранее ссылку (например из папки «куда»), то «замороженное» время изменений и атрибуты у этой не затронутой ссылки обновятся. Если просматривая в браузере список файлов в виде таблицы добавить столбец «Владелец», то «замороженная» не затронутся ранее ссылка будет обновляться сразу (и ее время и атрибуты).
* Все вышеперечисленное касается точно только последних версий Windows. В устаревших (например XP или Vista) все может быть иначе — это нужно проверять отдельно.
Интересные ключи Robocopy
Некоторые полезные и малопонятные параметры (ключи):
— исключить (из операций) файлы, которые (в папке откуда) старее («older»):
— если старее окажется файл в папке куда, то он будет в ней перезаписан — все как обычно
— если файл в папке куда вдруг окажется новее, то он останется нетронутым
ВАЖНО! Файл будет перезаписан (в первом случае), или не затронут (во втором случае) независимо того какой у него размер или атрибуты. Кроме того, если у обрабатываемых файлов есть посторонние внешние жесткие ссылки, то обрабатываемые файлы могут быть неверно прочитаны Robocopy — см
об этом здесь ниже в разделе о .
— исключить (из операций) файлы, которые (в папке откуда) новее («newer»):
— если новее вдруг окажется файл в папке куда, то он будет в ней перезаписан
— если файл в папке куда окажется старее, то он останется нетронутым
ВАЖНО! Файл будет перезаписан (в первом случае), или не затронут (во втором случае) независимо того какой у него размер или атрибуты. Кроме того, если у обрабатываемых файлов есть посторонние внешние жесткие ссылки, то обрабатываемые файлы могут быть неверно прочитаны Robocopy — см
об этом здесь ниже в разделе о .
— исключить (из операций) измененные («changed») файлы:
— только одинаковое время (!) и разный размер означают, что файлы «changed»
— если файлы имеют одинаковое время и разный размер — файл в папке куда останется нетронутым (будет исключен из обработки)
— если файлы имеют разное время то даже разный размер не будет иметь значения, — файл в папке куда НЕ будет считаться «changed» и НЕ будет исключен из обработки (а будет видимо перезаписан).
— атрибуты файлов для этого ключа вообще не важны
ВАЖНО! Если одноименные файлы в папках откуда и куда имеют одинаковые метки времени, одинаковый размер (!), но разное содержимое (а такое тоже бывает), то Robocopy этого к сожалению не увидит — в этом случае его будет интересовать только размер файлов. Так же надо учитывать что посторонние жесткие ссылки на обрабатываемые файлы могут сильно повлиять на достоверность результата, поскольку информация о новом размере файла может отсутствовать (даже если размер был изменен — см
ниже о )
Так же надо учитывать что посторонние жесткие ссылки на обрабатываемые файлы могут сильно повлиять на достоверность результата, поскольку информация о новом размере файла может отсутствовать (даже если размер был изменен — см. ниже о ).
— исключить (из операций) «дополнительные» («extra») файлы и папки, — которых НЕТ в папке откуда, но они есть в папке куда.
— исключить (из операций) «одинокие» («lonely») файлы и папки, — которые ЕСТЬ в папке откуда, но отсутствуют в папке куда.
— включить одинаковые («same») файлы, — которые полностью идентичны (по времени, размеру и атрибутам)
— включить «твикнутые» («tweaked») файлы, — которые имеют одинаковый размер и метки времени, но разные атрибуты.
Полезная таблица для понимания классификации файлов в Robocopy:
File Exists In Exists In Source/Dest Source/Dest Source/Dest Class Source Destination File Times File Sizes Attributes =========== =========== ================ =============== ============= ============ Lonely Yes No n/a n/a n/a Tweaked Yes Yes Equal Equal Different Same Yes Yes Equal Equal Equal Changed Yes Yes Equal Different n/a Newer Yes Yes Source > Dest n/a n/a Older Yes Yes Source < Dest n/a n/a Extra No Yes n/a n/a n/a Mismatched Yes (file) Yes (directory) n/a n/a n/a
Разбор команд Robocopy — многопоточность Robocopy
Robocopy на самом деле имеет множество функций и в команде, показанной в этом руководстве. Мы используем следующие переключатели, чтобы сделать копирование надежным и быстрым.
- / S — Копируйте подкаталоги, но не пустые.
- / E — Скопируйте подкаталоги, в которых также есть пустые.
- / Z — Фактически копируйте файлы в перезапускаемом режиме.
- / ZB — Использует перезапускаемый режим, если в доступе отказано, используйте режим резервного копирования.
- / R: 5 — Фактически повторите попытку 5 раз (вы также можете указать другое число, фактически по умолчанию 1 миллион).
- / Вт: 5 — Подождите 5 секунд, прежде чем повторить попытку (вы также можете указать другое число, по умолчанию 30 секунд).
- / TBD — Подождите, пока не будут определены имена общих ресурсов (ошибка повтора 67).
- / NP — Нет прогресса — не отображать процент скопированных.
- / V — Создавать подробный вывод, показывая также пропущенные файлы.
- / MT: 32 — Делайте многопоточные копии вместе с n потоками (по умолчанию 8).
FastCopy
Полезный инструмент для работы, обеспечивающий быстрое перемещение на жёсткий диск. Улита совершенно бесплатная. Приложение имеет открытый исходный код, позволяющий не только копировать, но и удалять файлы с расширенными возможностями.
FastCopy использует механизм копирования, который отличается от Explorer. Улита считывает большие фрагменты вместо маленьких. Соответственно программа работает намного быстрее и практически не нагружает систему. FastCopy позволяет определять скорость копирования и размер буфера.
Встроенная функция NonStop делает процесс более удобным (даже при выявлении ошибок процесс будет продолжаться).
Также представлена портативная версия FastCopy Portable, осуществляющая только одну функцию — копирование, но значительно быстрее, чем это делает стандартный Explorer, при этом его даже не нужно устанавливать на компьютер. Достаточно загрузить улиту на флешку и использовать на разных девайсах.
Параметры
Параметр | Описание |
---|---|
источник | Обязательный параметр. Задает местонахождение и имена файлов для копирования. Параметр должен задавать или диск, или путь. |
результат | Задает место, куда будут скопированы файлы. Параметр может включать имя диска с двоеточием, имя каталога, имя файла или их комбинацию. |
/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]] Определяет список файлов, содержащих строки. |
/y | Устраняет выдачу запроса на подтверждение перезаписи существующего конечного файла. |
/-y | Выдает запрос на подтверждение перезаписи существующего конечного файла. |
/z | Копирует по сети в режиме перезапуска. |
/? | Отображает справку в командной строке. |
Путь первый — ROBOCOPY
Данная утилита идет из коробки в Windows 7 и Server 2008. На более старых ОС ее может не оказаться (например, на XP и Server 2003 из коробки ее точно нет). В таком случае можно скачать и установить Windows Server 2003 Resource Kit Tools: вот отсюда
http://www.microsoft.com/download/en/details.aspx?id=17657
. В этот тулкит, кроме всего прочего, входит наш инструмент.
Итак, вот пример использования данной утилиты:
robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /R:2 /W:5
В данном примере:
Мы копируем папку «исходная папка», находящуюся на локальном диске D:
Мы копируем эту папку на \\192.168.0.1 в папку «целевая папка»
/E : Мы копируем все подпапки и файлы
/Z : Включаем поддержку докачки (на случай обрыва связи)
/COPY:TDASO : Копируем все атрибуты и ACL прав доступа NTFS (но не копируем атрибуты аудита)
/DCOPY:T : Копируем время создания папок
/M : Копируем только файлы с установленным атрибутом «A — Архивный» и сбрасываем этот атрибут, что позволяет нам копировать только измененные файлы.
/R : Количество повторных попыток копирования файла в случае, если копирование не удалось. Причем «не удалось» срабатывает и в том случае, если доступ к файлу закрыт. По-умолчанию = 1 миллионы, т.е. бесконечно, потому копирование благополучно встанет на первом же файле, к которому не будет доступа.
/W : Задержка в секундах между попытками копирования. По-умолчанию = 30 секундам.
Заметка. Очень рекомендую задавать вручную параметры /R и /W, иначе при автоматической синхронизации она попросту зависнет, встретив на своем пути ошибку доступа.
Много больше опций Вы можете почерпнуть из хелпа:
robocopy /?
Чем эта утилита хороша по сравнению с XCOPY:
- Она умеет работать с файлами, длина имени которых больше 256 символов
- Она умеет делать зеркало, т.е. чистую синхронизацию, при которой файлы, удаленные в папке-источнике, будут удалены и в папке назначения.
Для того, чтобы зеркалировать папки (т.е. удалять в папке назначения все файлы, которые более не существуют в папке-источнике) — нужно добавить ключ «/PURGE»:
robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /PURGE
А вот несколько примеров запуска этой утилитыСкопировать файлы, измененные за последние 5 дней (исключая сегодня):
robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /maxage:5 /minage:1
Переместить все файлы (не копировать):
robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /move /e
Копировать только указанные файлы по шаблону
robocopy D:\исходная_папка \\192.168.0.1\целевая_папка *.xls *.doc *.txt /e
Используйте инструмент командной строки Robocopy
Robocopy — это инструмент командной строки. Чтобы зеркалировать папку в другую папку (в моем случае это папка на моем сетевом диске), используйте следующие параметры:
robocopy source_directory target_directory / MIR
Замените source_directory и target_directory на соответствующие пути к папкам
Обратите внимание, что вам придется заключить его в кавычки, если в пути к папке есть пробелы
Это основная команда, которая вам понадобится. Он имеет только один ключ: / MIR. / MIR представляет собой комбинацию ключей / e и / purge, которые в совокупности копируют все подкаталоги (включая пустые подкаталоги) и удаляют файлы и каталоги, которых больше нет в исходном каталоге. / MIR также перезаписывает параметры безопасности каталога (в отличие от / e), если каталог уже существует.
Просто введите приведенную выше команду в cmd.exe, чтобы это произошло.
Ход выполнения копирования файла будет показан в командном окне. После этого вы получите сводку переданных файлов. Здесь вы увидите, что 2 файла были скопированы, а 1 удален, потому что его не было в исходном каталоге. Только 1 каталог был скопирован, потому что другой каталог был корневым, который уже существовал.
Чтобы избавить себя от необходимости печатать, что при каждом импорте фотографий в вашу библиотеку вы можете скопировать и вставить команду в Блокнот и сохранить ее с расширением .bat .
Затем все, что вам нужно сделать, это дважды щелкнуть по нему, чтобы запустить его.
С помощью пакетного файла вы также можете автоматизировать его запуск один раз в неделю, ежедневно и т. Д., Аналогично моему предыдущему совету о том, как автоматически просыпаться и спать на компьютере с помощью планировщика задач Windows. Просто замените wake.bat и sleep.bat для mirror.bat.
Выход
Robocopy выводит на экран или, при желании, в файл журнала имена всех обнаруженных каталогов в алфавитном порядке. Каждому имени предшествует количество файлов в каталоге, которые соответствуют критериям для копирования. Если каталог еще не существует в целевом объекте, он помечается как «Новый каталог»; если каталог пуст и параметр / E не используется или он не содержит файлов, соответствующих критериям, новый каталог не будет создан.
Если параметр / NFL (без имен файлов в журнале) не используется, копируемые файлы будут перечислены после имени каталога, в котором они находятся.
В конце вывода находится таблица с номерами каталогов, файлов и байтов. Для каждого из них в таблице указано общее число, найденное в источнике, число скопированных (включая каталоги с пометкой «New Dir», даже если они не скопированы), число пропущенных (поскольку они уже существуют в целевом объекте) и количество несоответствий , FAILED и доп . «Сбой» может означать, что произошла ошибка ввода-вывода, препятствовавшая копированию файла, или отказано в доступе. Также есть строка затраченного времени (в которой время, потраченное на отказавшие файлы, кажется, не в том столбце).
Примеры использования
Чтобы копировать все файлы и подкаталоги (включая пустые подкаталоги) с диска 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. В результате на экран выводится сообщение о характере ошибки и осуществляется выход из пакетной программы.
Путь второй – XCOPY
Данная утилита более старая, чем ROBOCOPY, и имеет меньше возможностей. Так, она не поддерживает пути с длинной имени более 256 символов (как это не умело делать FAT) и она не умеет делать зеркалирование. Более того, у нее отмечаются проблемы с копированием прав доступа ACL NTFS, как минимум – при копировании файлов на Samba-сервер.
Вот пример ее запуска:
xcopy "d:\исходная_папка" \2.168.0.1\целевая_папка /D /E /C /I /H /R /K /Y /F /O
Здесь мы:
- Копируем все файлы из директории “исходная папка”, находящейся на диске “D:”
- Копируем все файлы на компьютер \\192.168.0.1 в папку “целевая папка”
- /D : Копируем только измененные файлы (по дате изменения)
- /E : Копируем подкаталоги, включая пустые
- /C : Игнорируем ошибки, если они возникли во время копирования, и продолжаем копирование
- /I : Целевой объект – это папка
- /H : Копировать скрытые и системные файлы
- /R : Перезаписываем файлы, предназначенные только для чтения
- /K : Копируем атрибуты, такие, как “только для чтения”, “архивный”, “системный”, “скрытый”
- /Y : Не спрашивать подтверждение на перезапись файлов
- /F : Вывод полных имен исходных и целевых файлов (иначе – только имена файлов, без папок)
- /O : Если установлен – копировать так-же ACL NTFS атрибуты доступа
По моему личному опыту ROBOCOPY лучше справляется со своей работой, в особенности, если Вы копируете файлы файловой помойки, куда лазят несколько сотен людей – бардака там бывает достаточно и длинна файловых имен с путем нередко больше 256 символов.
Post Views:
3 379
Вывод
В целом, Robocopy работает хорошо для меня. Он синхронизирует мои файлы, чтобы они были доступны для всех устройств в моей сети. И это кажется значительно быстрее, чем SyncToy. Обычно я синхронизируюсь сразу же, когда выполняю импорт, но если я забываю, он запускается один раз в день в 5 часов утра (что составляет около 15 минут, прежде чем я сижу за компьютером первым делом утром).
Кроме того, это будет работать намного лучше, если вы используете один каталог для ваших фотографий и видео. Если у вас есть несколько каталогов, все может стать немного сложнее. Но это может быть так же просто, как запуск нескольких команд Robocopy (по одной для каждой пары папок для синхронизации).