Robocopy 명령어: 데이터 이전, 폴더 동기화 및 기타

Robocopy는 Windows에서 대량의 데이터를 복사하는 데 가장 많이 사용되는 명령줄 유틸리티 중 하나입니다. 이 도구는 강력하기 때문에 인기가 많습니다. 그러나 이 모든 강력함에는 복잡성이 따릅니다. 이 안내서에서는 이 유용한 도구를 사용하는 완전한 튜토리얼을 제공하면서 이 복잡성을 해체합니다.

Robocopy는 Windows NT부터 사용할 수 있는 Windows 명령줄 유틸리티입니다. 다재다능하지 않은 xcopy 유틸리티의 대체품입니다. 명령 프롬프트에서 드라이브 경로 또는 서버 경로를 지정하여 파일을 복사/이동할 수 있습니다.

이 글을 작성하는 시점에 Robocopy의 버전은 10.0.18까지 업데이트되었습니다. 저는 이 버전에서 테스트를 수행했습니다.

Robocopy는 효율적이고 빠른 파일 복사 및 이동을 수행하기 위해 활용할 수 있는 다양한 기능을 제공합니다. 다음과 같은 기능을 수행할 수 있습니다:

  • 네트워크를 통해 파일을 복사하고 재개 기능 제공
  • 무한 루프로 인한 일반적인 실패로부터 발생하는 NTFS 접속점 건너뛰기 가능
  • 파일 및 디렉토리 속성 복사 및 타임스탬프 유지
  • NTFS 권한, 소유자 및 감사 정보 복사 가능
  • 디렉토리 타임스탬프 복사 가능
  • 백업 모드에서 파일 복사하여 관리자에게 권한이 거부된 파일도 복사 가능
  • 자동 재시도
  • 두 폴더를 동기화할 수 있음
  • 이미 복사된 파일을 건너뛰는 스마트한 기능
  • 256자의 경로 제한을 초과하는 경로 복사 가능
  • 멀티스레드 기능을 사용하여 비동기 복사 수행
  • 스크립트에서 사용할 수 있는 표준화된 종료 코드 반환

보시다시피, 복사할 것이 많습니다. 이 편리한 도구에 대해 알아야 할 모든 내용을 다루고자 했습니다.

일반적인 Robocopy 구문 참조

단일 유틸리티에 대한 이렇게 긴 블로그 포스트는 왜일까요? 아래의 표를 한번 살펴보세요. Robocopy를 사용하여 파일을 복사하거나 이동하는 데는 많은 옵션이 있습니다! 각 섹션에서 더 많은 옵션을 찾을 수 있습니다.

이 표는 robocopy /?에서 반환된 도움말 구문을 기반으로 작성되었습니다. 더 의미 있는 섹션으로 분할되었으며, 시간이 지남에 따라 추가되었으며, 더 유용한 정보를 제공하기 위해 정리되었습니다.

소스 옵션

Switch Explanation Default Behavior Equivalent Switch Notes
/S Copy subfolders
/E Copy subfolders including empty subfolders
/COPY:[DATSOU] Copy options /COPY:DAT D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T)
/SEC Copy files with SECurity /COPY:DATS
/DCOPY:T Copy directory timestamps
/COPYALL Copy ALL file info /COPY:DATSOU This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit)
/NOCOPY Copy NO file info useful with /PURGE
/A Copy only files with the Archive attribute set
/M like /A, but remove Archive attribute from source files
/LEV:n Only copy the top n LEVels of the source tree
/MAXAGE:n MAXimum file AGE – exclude files older than n days/date
/MINAGE:n MINimum file AGE – exclude files newer than n days/date If n < 1900 then n = no of days, else n = YYYYMMDD date
/FFT Assume FAT File Times 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network.
/256 Turn off very long path (> 256 characters) support

대상 옵션

Switch Explanation Default Behavior Equivalent Switch Notes
/A+:[RASHCNET] Set file attribute(s) on destination files + add
/A-:[RASHCNET] Remove file attribute(s) on destination files
/FAT Create destination files using 8.3 FAT file names only
/CREATE Create directory tree structure + zero-length files only
/DST Compensate for one-hour DST time differences

복사 옵션

Switch Explanation Default Behavior Equivalent Switch Notes
/L List files only Don’t copy, timestamp or delete any files
/MOV Move files Delete from source after copying
/MOVE Move files and directories Delete from source after copying
/sl Copy file symbolic links instead of the target
/Z Copy files in restartable mode Survive a network glitch
/B Copy files in backup mode
/J Copy using unbuffered I/O Recommended for large files
/NOOFFLOAD Copy files without using the Windows copy offload mechanism https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11)
/EFSRAW Copy any encrypted files using EFS RAW mode
/TIMFIX Fix file times on all files, even skipped files
/XO Exclude older if destination file exists and is the same date or newer than the source – don’t bother to overwrite it.
/XC Exclude changed files
/XN Exclude newer files
/XX Exclude files present in destination but not source /XX
/XF file [file]… Exclude files matching given names/paths/wildcards
/XD dirs [dirs]… Exclude directories matching given names/paths. /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S
/IA:[RASHCNETO] Include files with any of the given attributes
/XA:[RASHCNETO] Exclude files with any of the given attributes
/IM Overwrite modified files. This includes the same files with different times.
/IS Overwrite files even if they are already the same
/IT Include tweaked files
/XJ Exclude junction points from source /XJ
/XJD Exclude junction points from source directories
/XJF Exclude junction points from source files
/MAX:n Exclude files bigger than n bytes
/MIN:n Exclude files smaller than n bytes
/MAXLAD:n Exclude files unused since n
/MINLAD:n Exclude files used since n If n < 1900 then n = n days, else n = YYYYMMDD date
/MIR Mirror a directory tree /PURGE /E
/PURGE Delete dest files/folders that no longer exist in source
/XL Exclude files present in source but not destination
/SECFIX Robocopy /secfix fixes file security on all files, even skipped files. Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC
/ZB Use restartable mode; if access denied use Backup mode

모니터링 옵션

Switch Explanation Default Behavior Equivalent Switch Notes
/R:n Number of retries on failed copies /R:1000000 Always try to set this option. I recommend setting this to 10-20 to not waste time retrying.
/W:n Wait time between retries /W:30 Always try to set this option to a lower number to retry more quickly. I suggest 5-10.
/REG Save /R:n and /W:n in the Windows registry as default settings
/RH:hhmm-hhmm times when new copies can be started
/TBD Wait for sharenames to be defined retry error 67
/PF Check run hours on a per file (not per pass) basis
/MON:n Run again when more than n changes seen
/MOT:m Run again in m minutes, if changed

Robocopy 동작 이해

I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.

I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.

Robocopy는 전체 디렉토리 별로 파일을 복사하고 이동합니다.

로보코피 실행마다 소스 및 대상 디렉토리가 있을 것입니다. Robocopy는 전체 디렉토리를 기준으로 파일을 복사하고 이동합니다. Robocopy를 사용하여 단일 파일을 복사하는 것은 불가능합니다. 단일 파일을 복사하려면 copy 또는 PowerShell의 Copy-Item을 사용하십시오.

하지만 필터링을 올바르게 설정하면 로보코피를 사용하여 단일 파일을 복사할 수 있습니다. 단일 파일을 복사하려면 소스 다음에 즉시 대상 디렉토리와 파일 이름을 지정하십시오.

> robocopy c:\src d:\dst copythisfile.txt

구문은 환경에 따라 다릅니다

또한, robocopy에 제공하는 옵션은 환경에 따라 다를 수 있습니다. 옵션을 사용하기 위해 몇 가지 질문에 답해야 할 것입니다.

  • 항상 빈 디렉토리로 복사할 예정인가요?
  • 목적 디렉토리에 이미 파일이 있는지 가능성이 있습니까?
  • 테라바이트 단위의 데이터를 복사할 것인가요 아니면 몇 메가바이트만 복사할 것인가요?
  • 파일을 네트워크로 복사할 것인가요 아니면 로컬로 복사할 것인가요?
  • …그리고 더 많은 것들.

대상 파일 디렉토리에 파일이 없다면 파일을 덮어쓰는 옵션에 대해 걱정할 필요가 없습니다. 파일을 네트워크로 복사하지 않을 경우 해당 옵션에 대해 걱정하지 마세요. 현재 상황 및 잠재적인 미래 상황을 명확히 정의하세요.

기본 옵션 인식

Robocopy는 기본적으로 많은 옵션을 사용합니다. 위의 표를 살펴보면 이를 확인할 수 있습니다. 실행할 때마다 편리한 출력을 제공합니다.

아래에서 robocopy를 가장 기본적인 옵션(소스 및 대상 폴더)으로 실행할 때 자동으로 일부 옵션이 사용된 것을 확인할 수 있습니다. 기본 동작을 이해하는 것이 중요합니다.

출력에서 본 옵션을 옵션 설명과 비교하여 robocopy가 내부적으로 수행하는 작업을 정확히 이해할 수 있습니다.

Default robocopy options

Robocopy 명령의 기능 이해

copy 또는 PowerShell의 Copy-Item cmdlet을 사용한 적이 있다면 소스와 대상을 지정하고 일상 업무를 수행했을 것입니다. 구성할 수 있는 옵션은 많지 않습니다. 이러한 robocopy 명령은 기본 동작을 가지고 있습니다.

반면에 robocopy는 훨씬 더 많은 기능을 이해하며 원하는대로 동작을 조정할 수 있는 유연성을 제공합니다.

로보코피(Robocopy)가 파일 또는 디렉토리 개념을 알고 있는 것은 중요합니다. 파일시스템에는 그 이상의 내용이 있으며, 로보코피는 거의 모든 것을 지원합니다.

A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:

  • a timestamp (written, modified and accessed)
  • NTFS ACL
  • 소유자
  • NTFS 감사 정보
  • 숨김 플래그
  • 아카이브 플래그

파일을 복사하거나 이동할 때, 원한다면 이 모든 정보도 함께 가져올 수 있습니다.

로보코피를 실행할 때 파일을 단순히 복사하는 것뿐만 아니라 다른 모든 정보도 포함될 수 있다는 것을 이해하는 것이 중요합니다. 로보코피에 제공하는 옵션에 이를 감안해야 합니다.

기본: WhatIf 시나리오 실행하기

아직 동작을 수행하고 싶지 않은 대형 파일 서버를 마이그레이션하려는 경우, 로보코피를 사용하여 수행할 작업을 확인할 수 있습니다.실제로 로보코피가 수행했을 것으로 예상되는 작업 목록을 반환할 수 있습니다.

/L 옵션을 사용하여 지정한 모든 파일 및/또는 폴더를 열거하고 복사/이동할 파일 목록을 반환하도록 로보코피에 지시할 수 있습니다.

/L 옵션은 다른 옵션과 함께 사용할 수 있습니다. 이는 로보코피가 사용한 모든 옵션(기본값 포함)을 반환하는 좋은 방법입니다. 지정한 옵션에 따라 로보코피가 수행할 작업을 전반적으로 파악할 수 있습니다.

Using /L

기본: 파일 복사하기

로보코피의 가장 기본적인 사용 방법은 옵션이 없는 소스 및 대상 디렉토리를 사용하는 것입니다.

> robocopy C:\src C:\dst

이 옵션은 C:\src에서 (하위 폴더 제외) 모든 파일을 C:\dst로 복사합니다.

당신은 하위 폴더 (비어 있거나 비어 있지 않음) 및 NTFS 권한을 포함하여 모든 것을 복사 할 수도 있습니다. 이는 내가 알기로는 디렉토리의 모든 것을 다른 디렉토리로 문자 그대로 복사하는 방법입니다.

아래에서는 모든 NTFS ACL, 파일 소유자, 하위 폴더 (비어있는 것 포함) 및 모든 파일 속성을 복사하고 있습니다. 이 모든 것은 빈 하위 폴더를 포함하기 위해 /E 옵션을 사용하고 나머지를 포착하기 위해 /COPYALL을 사용하여 가능합니다.

> robocopy C:\src C:\dst /E /COPYALL

기본 사항: 파일 이동

파일 이동은 복사와 마찬가지로 파일을 한 디렉토리에서 다른 디렉토리로 전송합니다. 이동 작업의 유일한 차이점은 원본 파일이 복사 후에 제거된다는 것입니다.

복사 후에 원본에서 파일/디렉토리를 삭제하려면 /MOV 옵션을 사용하십시오. 이렇게하면 지정된 디렉토리의 모든 파일 (하위 폴더 없음)이 제거됩니다.

> robocopy C:\src C:\dst /MOV

/MOVE를 사용하여 모든 파일 및 하위 폴더를 이동할 수도 있습니다.

> robocopy C:\src C:\dst /MOVE

기본 사항: 파일 동기화

Robocopy를 사용하면 두 개의 디렉토리를 동기화 할 수 있습니다. 이는 대상 디렉토리의 모든 파일이 소스 디렉토리에 있고 더 이상 없음을 보장하는 것을 의미합니다. /MIR은 대상에 소스에 없는 모든 파일을 복제하고 대상에 소스에 없는 파일을 삭제합니다. 주의하세요!

> robocopy C:\src C:\dst /MIR

네트워크를 통해 파일 복사

네트워크를 통해 파일을 복사하는 경우 고려해야 할 몇 가지 옵션이 있습니다.

Robocopy는 /Z 옵션을 사용하여 ‘재시작 가능 모드’로 파일을 복사할 수 있습니다. 이는 파일 복사가 시작되고 중간에 실패하는 경우 완전히 실패하는 대신 다시 시작할 수 있음을 의미합니다. /Z 옵션은 스트림이 네트워크에서 끊어지는 경우 유용합니다.

경고: 몇몇은 /Z를 사용하면 성능이 1/4로 감소한다고 보고했습니다. 결과를 알려주세요.

/FFT 옵션도 사용할 수 있습니다. 이 스위치는 네트워크 전송 시 파일 타임스탬프를 더 정확하게 보존하는 데 알려져 있습니다. 이 옵션은 NTFS 대신 FAT 파일 시스템 타임스탬프를 사용합니다.

robocopy C:\src \\SRV1\share /Z /FFT

인터패킷 갭 제어에 /IPG 사용하기

네트워크를 통해 파일을 복사할 때 /IPG 스위치를 사용할 수 있습니다. 이는 인터패킷 갭 옵션으로도 알려져 있습니다. 이 옵션은 새 패킷을 보내기 전에 robocopy가 기다릴 주기(밀리초 단위)를 정의합니다.

드라이브 문자가 아닌 UNC 경로를 항상 사용하세요

A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.

Robocopy 백업 모드 (Robocopy /Z)

Robocopy에는 백업 모드로 파일을 복사하는 옵션 (/B) 또는 재시작 가능 모드로 복사하는 옵션 (/ZB)이 있습니다. 그러면 “백업 모드”란 무엇인가요?

일반적으로 Windows에서 파일을 복사하고 관리 권한이 필요한 파일을 만나면 액세스 권한이 없음을 나타내는 오류가 발생합니다. 지역 관리자로 실행 중이더라도 Windows에서는 액세스를 허용하지 않습니다.

경고: Windows Server 2016 서버에 데이터를 복사할 때 데이터 중복 제거가 켜져 있는 경우 손상된 서버 볼륨에 대한 보고가 있었습니다. /ZB 스위치를 사용하면 결과적으로 시스템 볼륨 정보에서 중복 제거 청크 저장소가 손상됩니다. 복사된 파일은 읽을 수 없으며 조작하려고 시도할 때 오류가 발생합니다. 더 많은 정보를 포함한 Serverfault 링크를 참조하십시오.

백업 모드는 권한에 대해 걱정하지 않고 파일에 액세스하는 방법입니다.

Robocopy는 백업 모드를 사용하여 파일을 읽기 위해 SeBackupPrivilege를 사용하고 필요한 파일에 액세스하기 위해 SeRestorePrivilege 사용자 권한을 사용합니다. 이렇게 하면 일반적으로 해당 파일에 대한 액세스를 방지하는 ACE(액세스 제어 항목)를 무시할 수 있습니다.

SeBackupPrivilegeSeRestorePrivilege 사용자 권한은 일반적으로 백업 연산자관리자 그룹의 사용자에게 할당되지만 때로는 제거될 수도 있습니다. 백업 모듈은 이러한 위험을 제거하고 robocopy를 실행하는 사용자에게 임시로 해당 권한을 부여합니다.

사용자 계정에 해당 권한이 있는지 확인하려면 whoami /priv을 실행하면 두 권한이 표시됩니다.

파일 및 폴더 필터링

사용 가능한 대부분의 옵션은 다양한 기준에 따라 파일과 디렉터리를 제외하는 방법입니다. 다양한 기준에 따라 파일과 디렉터리를 필터링하거나 제외하는 방법을 모두 설명했습니다.

파일 이름 또는 파일 확장자로

로보복이 호출될 때 복사/이동되는 파일을 필터링하기 위해서 와일드카드를 사용합니다. 와일드카드를 사용하여 특정 파일 이름 문자열 또는 확장자와 일치하는 파일을 필터링할 수 있습니다.

예를 들어, TXT 파일만 복사하려면 *.txt를 지정할 수 있습니다.

> robocopy C:\src C:\dst *.txt

만약 a로 시작하는 파일에 대해서만 제한하고 싶다면 a*를 사용할 수 있습니다.

> robocopy C:\src C:\dst a*

또한, 여러 개의 파일 이름 일치 세트를 제공하려면 아래와 같이 공백으로 구분하면 됩니다.

> robocopy C:\src C:\dst a* b*

파일 이름으로 필터링할 때, 로보복은 출력에서 필터를 보여줍니다.

FIltering files output

디렉토리 이름으로

로보복은 파일 뿐만 아니라 디렉토리 이름으로도 항목을 필터링할 수 있습니다. robocopy /xd를 사용하여 특정 이름과 일치하는 디렉토리를 제외할 수 있습니다.

여러 폴더를 복사할 때, 실행에서 폴더를 제외하려면 /XD 스위치를 사용하세요.

> robocopy C:\src C:\dst /XD "c:\src\exclude"

파일/디렉토리 타임스탬프로

아래에는 다양한 타임스탬프 속성에 따라 파일 및 폴더를 제외하는 로보복 옵션이 모두 나와 있습니다.

Switch Explanation
/DCOPY:T Copy directory timestamps
/MAXAGE:n Exclude files older than n days/date
/MINAGE:n Exclude files newer than n days/date
/XO If destination file exists and is the same date or newer than the source, don’t overwrite
/XN If destination file exists and is the same date or older than the source, don’t overwrite

타임스탬프와 같은 것을 기준으로 필터링할 때 선택할 수 있는 두 가지 인기 있는 옵션이 있습니다; /XO/MAXAGE입니다.

/XO는 소스보다 최신인 파일만 복사에서 제외할 수 있게 해줍니다. /XO 옵션을 사용하여 액세스 날짜에 따라 로보복에서 새로운 파일만 복사할 수 있습니다.

> robocopy C:\src C:\dsc /XO

파일의 최대 연령을 알고 있다면 /MAXAGE 옵션을 사용할 수도 있습니다. 이를 통해 복사되기 전에 파일이 가져야 하는 오래된 날짜를 YYYMMDD 형식으로 지정할 수 있습니다.

> robocopy c:\src c:\dst /S /MAXAGE:20191001

Robocopy 작업

여러 가지 옵션이 제공되는 것을 확인하셨을 것입니다. 이러한 옵션들은 얼마 지나지 않아 어려워질 수 있습니다. 다행히도 모든 옵션을 매번 완벽하게 기억하고 확인해야 하는 대신 더 나은 방법이 있습니다.

Robocopy 작업 파일은 한 줄에 하나의 옵션을 포함하는 텍스트 파일입니다. 일반적으로 robocopy를 사용하여 이러한 작업 파일을 생성합니다. 생성한 후에는 robocopy를 사용하여 수정하거나 간단한 텍스트 편집기를 사용할 수 있습니다.

작업과 함께 작동하는 다양한 robocopy 명령이 있습니다.

Switch Explanation Default Behavior Equivalent Switch Notes
/JOB:jobname Take parameters from the named job file
/SAVE:jobname Save parameters to the named job file
/QUIT Quit after processing command line Useful for viewing parameters
/NOSD No source directory is specified
/NODD No destination directory is specified
/IF Include the following files

A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob. You can see that you can provide comments in the job file using :: which is most of what this file has.

주석이 없으면 파일에는 한 줄에 하나의 옵션만 포함됩니다.

::
:: Robocopy Job C:\MYJOB.RCJ
::
:: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM
::

::
:: Source Directory :
::
        /SD:C:\SRC\     :: Source Directory.

::
:: Destination Directory :
::
        /DD:C:\SRC\     :: Destination Directory.

::
:: Include These Files :
::
        /IF             :: Include Files matching these names
::              *.*     :: Include all names (currently - Command Line may override)

::
:: Exclude These Directories :
::
        /XD             :: eXclude Directories matching these names
::                      :: eXclude no names (currently - Command Line may override)

::
:: Exclude These Files :
::
        /XF             :: eXclude Files matching these names
::                      :: eXclude no names (currently - Command Line may override)
::
:: Copy options :
::
        /DCOPY:DA       :: what to COPY for directories (default is /DCOPY:DA).
        /COPY:DAT       :: what to COPY for files (default is /COPY:DAT).
::
:: Retry Options :
::
        /R:1000000      :: number of Retries on failed copies: default 1 million.
        /W:30           :: Wait time between retries: default is 30 seconds.
::
:: Logging Options :
::

작업 파일 저장

작업 파일을 저장하는 것은 구문 끝에 /SAVE:<작업이름> 옵션을 추가하는 것만으로 간단합니다. <작업이름>을 작업의 이름으로 바꿉니다. /SAVE 옵션은 robocopy를 실행한 디렉토리에 <작업이름>.rcj이라는 파일을 생성합니다.

> robocopy C:\src C:\dst /SAVE:myjob

반드시 /SAVE를 마지막 옵션으로 지정해야 합니다. /SAVE 이후에 지정된 옵션은 작업 파일에 추가되지 않습니다. 또한, 이미 존재하는 작업 파일이 있더라도 robocopy는 항상 기존 파일을 덮어씁니다. 작업 파일을 백업하거나 버전 관리하세요!

참고: 작업 파일로 저장할 때 /MT 옵션을 사용하려고 하면 작업 파일에 포함되지 않습니다. 이를 포함시킬 수 있는지 알려주세요.

작업 파일 사용

작업이 작업 파일에 저장된 후에는 /JOB:<작업이름> 옵션을 사용하여 작업 파일을 읽을 수 있습니다. Robocopy는 작업 파일 내의 모든 매개변수를 읽습니다. 그런 다음 명령줄에 직접 옵션을 제공한 것처럼 실행됩니다.

> robocopy /JOB:myjob

작업 실행 없이 작업 파일 생성하기 – /QUIT 사용

/QUIT 옵션의 목적은 명확하지 않습니다. 표면적으로는 /QUIT이 실행 중인 작업을 강제로 종료시킨다고 생각할 수 있습니다. 그러나 /QUIT은 사실 작업이 실행되지 않도록 하는 옵션입니다.

공식적으로 /QUIT 옵션은 “robocopy가 명령줄 처리를 중단하도록 강제합니다”라고 설명되어 있습니다. 그러나 이는 작업을 실행하지 않고 작업 파일을 생성하는 것으로 더 잘 설명될 수 있습니다.

/SAVE 옵션을 사용하면 작업이 자동으로 실행됩니다. 작업을 실행하지 않고 작업 파일을 생성하는 방법은 없습니다. 텍스트 편집기를 사용하여 RCJ 작업 파일을 생성하거나 robocopy를 사용하여 작업 파일을 생성할 수 있습니다. 이때 /QUIT을 끝에 추가합니다.

> robocopy C:\src C:\dst /SAVE:myjob /QUIT

작업 파일 편집

작업 파일은 텍스트 파일이므로 좋아하는 텍스트 편집기로 편집하거나 robocopy를 사용하여 편집할 수 있습니다.

/JOB, /SAVE, /QUIT의 조합을 사용하여 작업 파일을 편집할 수 있습니다.

예를 들어, 작업 파일인 backupfiles.rcj에서 모든 EXE 파일을 제외하고 싶다고 가정해 보겠습니다. 이미 작업 파일을 생성했고 전체 파일을 덮어쓰고 싶지 않습니다. 다음과 같이 새로운 옵션을 추가할 수 있습니다:

> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT

여러 개의 작업 파일 사용하기

하나의 실행에서 여러 개의 작업 파일을 지정할 때, 해당 실행에 사용된 모든 옵션이 함께 결합됩니다.

예를 들어, 백업 파일 복사 작업에서 제외할 파일의 큰 목록이 있다고 가정해 보겠습니다. 텍스트 편집기를 열고 다음을 추가하여 exclude.rcj 파일을 만듭니다.

/XF
    a.exe
    b.txt
    c.cer

그런 다음, 다음과 같이 백업 파일 작업에서 이러한 파일을 제외할 수 있습니다.

> robocopy /JOB:backupfiles /JOB:exclude

원래 백업 파일 작업 파일은 이미 모든 EXE 파일을 제외하고 있었으므로, 위의 실행 구문은 /XF *.exe a.exe b.txt c.cer가 됩니다. Robocopy는 모든 옵션을 하나로 결합합니다.

Robocopy 템플릿 및 /NOSD/NODD 옵션 사용하기

작업 파일을 다룰 때 많은 경우, 작업 파일에 매개변수를 받아들일 수 있는 작업 파일을 만들 수 있습니다. Robocopy는 작업이 실행될 때 명령줄에서 값을 작업으로 전달할 수 있도록 합니다. 매개변수는 robocopy 용어는 아니지만 이 시나리오에 적합합니다.

/NOSD/NODD 옵션을 사용하거나 소스 및 대상 디렉터리를 명시적으로 지정하지 않고 생략하여 robocopy 작업이 매개변수를 받아들일 수 있도록 할 수 있습니다.

간단한 예를 들어, 다음 구문을 사용하여 소스 또는 대상 디렉터리를 지정하지 않은 작업 파일을 생성합니다. 이 작업의 목적은 소스에서 대상 디렉터리로 모든 TXT 및 EXE 파일을 복사하는 것입니다.

> robocopy *.txt *.exe /SAVE:backupfiles /QUIT

자체적으로 이 작업은 소스 또는 대상 디렉터리가 지정되지 않았기 때문에 작동하지 않습니다.

소스 및 대상 디렉토리 없이 작업을 생성하면 작업 파일이 자동으로 /NOSD/NODD 옵션을 사용하여 생성됩니다.

/NOSD           
/NODD
/IF
    *.txt
    *.exe
/DCOPY:DA
/COPY:DAT
/R:1000000
/W:30

/NOSD 옵션은 소스 디렉토리를 포함하지 않았음을 robocopy에 알리고, /NODD는 대상 디렉토리를 포함하지 않았음을 나타냅니다. 이 작업 파일은 다른 작업을 위한 “템플릿”입니다.

그러나 이 작업 파일에 “매개변수”를 전달하여 소스 및 대상 디렉토리를 제공할 수 있습니다.

방금 생성한 작업 파일을 사용하여 파일을 C:\src에서 C:\dst로 복사하려면 이 디렉토리를 직접 명령줄에 전달하면 작업에 전달됩니다.

> robocopy /JOB:backupfiles C:\src C:\dst

비동기 복사 (Robocopy /MT)

기본적으로 robocopy는 한 번에 하나의 파일만 처리합니다. 그러나 /MT 옵션을 사용하여 한 번에 복사할 파일의 수를 더 많이 할 수 있습니다.

/MT 옵션을 사용하면 robocopy에서 파일을 복사하는 데 사용할 스레드 수를 지정할 수 있습니다. 최대 128입니다.

다음과 같이 /MT를 사용할 수 있습니다:

> robocopy C:\src C:\dst /MT:32

I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.

/MT를 사용하는 경우 /IPG 또는 /EFSRAW를 사용할 수 없습니다. 더 나은 성능을 위해 로그를 콘솔에 출력하지 마십시오. 대신 /LOG를 사용하십시오.

Robocopy 예약

Robocopy를 실행하는 시간을 예약하는 몇 가지 방법이 있습니다.

/RH을 사용합니다.

/RH 옵션을 사용하면 robocopy가 특정 시간에만 실행되도록 설정할 수 있습니다. 이는 유지 보수 창 또는 모든 사람들이 퇴근한 시간에 유용합니다.

시작 시간과 종료 시간을 HHMM-HHMM 형식으로 지정할 수 있습니다. 예를 들어, robocopy를 호출하지만 시스템 시계에 의해 5PM부터 9AM까지만 실행되도록하려면 다음을 실행하세요:

> robocopy C:\src C:\dst /RH:1700-0900

해당 시간 이외의 시간에 robocopy를 호출하면 현재 시간을 알려주고 시작 시간까지 대기합니다.

Robocopy tells you what time it will start if scheduled

두 시간 모두 24시간 형식이며 정확히 네 자리여야합니다. 창은 두 분보다 커야합니다.

기본적으로 /RH를 사용하면 전체 실행 전에 시작 시간을 확인합니다. 그러나 많은 파일이 있고 프로세스가 그보다 길어질 것으로 예상되는 경우 /PF 옵션을 사용할 수 있습니다. /PF는 robocopy가 모든 파일 전에 창을 확인하도록 강제합니다.

작업 스케줄러 사용하기

출력 로그

Robocopy는 항상 출력 로그를 반환합니다. 해당 로그가 콘솔의 stdout로 표시되거나 로그 파일로 리디렉션되는지는 사용자의 선택에 달려 있습니다.

robocopy 출력을 표시할 때 다양한 옵션이 있습니다.

Switch Explanation Default Behavior Equivalent Switch Notes
/NP No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file.
/unicode Display the status output as unicode text
/LOG:file Output status to log file and overwrite
/UNILOG:file Output status to unicode log file and overwrite
/LOG+:file Output status to log file and append to existing log file
/UNILOG+:file Output status to unicode log file and append to existing log file
/TS Displays the file timestamps for every file processed.
/FP Replaces simple file names with full file pathnames in the output.
/NS Does not show file sizes.
/NC Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)
/NFL Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged
/NDL Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files.
/TEE Output to console window, as well as the log file
/NJH No job header
/NJS No job summary
/BYTES Print sizes as bytes
/X Report all files, not just those selected & copied
/V Produce verbose output log, showing skipped files
/ETA Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish).
/DEBUG Show debug volume information

/NJS/NJH를 사용하여 로그 요소 제한하기

기본적으로 robocopy는 출력에 작업 헤더와 작업 요약 두 요소를 반환합니다.

작업 헤더는 맨 위의 간단한 ROBOCOPY 헤더입니다.

Robocopy job header

작업 요약은 모든 파일/폴더의 요약 상태, 전송된 데이터 양 및 실행이 종료된 시간을 보여줍니다.

Robocopy job summary

작업 헤더를 숨기려면 /NJH 옵션을 사용하고, 작업 요약을 숨기려면 /NJS 옵션을 사용할 수 있습니다. 이러한 옵션 중 하나 또는 둘 다를 함께 사용할 수 있습니다.

Hiding the job header and job summary

출력 로그를 파일로 리디렉션하기

출력 로그를 저장해야 하는 경우 텍스트 파일로 리디렉션하거나 콘솔에 표시할 수 있습니다. 이를 위해 >, >>, PowerShell 또는 /LOG 옵션과 같은 전통적인 출력 리디렉터를 사용할 수 있습니다.

출력 로그를 기존 로그 파일을 덮어쓰면서 파일로 리디렉션하려면 아래와 같이 /LOG:<파일경로> 구문을 사용하십시오. 콘솔에서는 로그 파일의 경로만 표시됩니다.

> robocopy C:\src C:\dst /LOG:c:\file.log

 Log File : c:\file.log

기존 로그 파일의 내용을 유지하면서 결과를 파일에 추가하려면 아래와 같이 + 연산자를 사용할 수 있습니다.

> robocopy C:\src C:\dst /LOG+:c:\file.log

 Log File : c:\file.log

출력 로그를 파일로 리디렉션하고 콘솔에도 표시하기

출력 로그를 파일에 저장하면서 콘솔에서도 확인하려면 /TEE 옵션을 사용할 수 있습니다. 이 옵션은 robocopy가 출력을 로그 파일에 작성하면서 여전히 기본 동작으로 콘솔에 출력을 반환하도록 합니다.

robocopy C:\src C:\dst /LOG+:c:\file.log /TEE

종료 코드

다른 모든 명령 줄 유틸리티와 마찬가지로 robocopy는 실행 결과에 따라 종료 코드를 반환합니다. 우리는 모두 robocopy가 항상 0으로 성공적으로 종료되길 바랍니다만, 항상 그렇지는 않습니다.

아래에서는 robocopy가 반환하는 모든 종료 코드와 그에 대한 설명을 찾을 수 있습니다. 7보다 큰 종료 코드는 실행 중에 적어도 하나의 실패를 나타냅니다.

Exit Code Explanation
0 No action performed. Source and destination are synchronized.
1 At least one file was copied successfully.
2 Extra files or directories were detected. Examine log.
3 Exit codes 2 and 1 combined.
4 Mismatched files or directories found. Examine log.
5 Exit codes 4 and 1 combined.
6 Exit codes 4 and 2 combined.
7 Exit codes 4, 1 and 2 combined.
8 At least one file or directory could not be copied. Retry limit exceeeded. Examine log.
16 Copy failed catastrophically.

참고로, robocopy를 타사 유틸리티에서 실행하는 경우, 해당 유틸리티는 모든 0이 아닌 종료 코드를 실패로 간주할 수 있습니다. 이를 방지하기 위해 종료 코드가 1을 반환하는 경우 0으로 변경할 수 있습니다.

Robocopy의 “extra” 파일 종료 코드는 “extra” 파일이 대상 폴더에 있지만 원본 폴더에는 없는 경우 일반적으로 반환되는 코드입니다. 이 코드는 대상에서의 삭제를 방지하는 추가 파일을 제외합니다.

일괄 파일에서 종료 코드 변경

일괄 파일로 robocopy를 실행하는 경우 %ERRORLEVEL% 변수의 값을 찾을 수 있습니다. 1을 반환하면 exit 키워드를 사용하여 스크립트를 0으로 종료합니다.

> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0

PowerShell 스크립트에서 종료 코드 변경

PowerShell 스크립트에서 robocopy를 실행하는 경우 Start-Process를 사용하여 robocopy를 호출하고, PassThru를 사용하여 생성된 프로세스를 반환하고, Wait를 사용하여 robocopy의 완료를 기다릴 수 있습니다. 그런 다음 ExitCode 속성을 확인하여 값이 1인지 확인할 수 있습니다. 종료 코드가 1인 경우 $host.SetShouldExit()를 사용하여 PowerShell 스크립트를 0으로 종료합니다.

$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCode
if ($exitCode -eq 1) {
    $host.SetShouldExit(0)
}

일반적인 오류

수천 개의 파일을 처리하는 경우 일부 문제가 발생할 수 있습니다. 여기에는 일반적인 오류에 대한 분석이 제공됩니다

오류 잘못된 매개 변수

오류가 발생하여 오류: 잘못된 매개변수라고 표시되는 경우, 일반적으로 옵션을 잘못된 순서로 전달하려고 한 것입니다. robocopy 잘못된 매개변수 3 오류가 가장 일반적인 오류입니다.

A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.

Robocopy 예시

자신만의 robocopy 문자열을 작성하거나 다른 사람들이 배운 내용을 사용할 수 있습니다! 이 섹션에서는 robocopy를 사용하여 다양한 작업을 수행하는 방법에 대해 다룰 것입니다.

네트워크 폴더의 디렉토리 크기 찾기

기고자: northendtroooper (Reddit)

> robocopy "\\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64

폴더 내용물 빠르게 삭제하기 (하위 폴더의 권한 무시)

기고자: pizzasteveo (Reddit)

> robocopy c:\dummy c:\foldertodelete /MIR

대규모 파일 이동 수행

기고자: @MySnozzberries (Twitter)

이 코드 조각의 목표는 모든 파일에 대한 소유권을 관리자로 강제로 설정하는 것입니다. 그런 다음 상속을 설정하더라도 관리자 그룹을 위한 명시적인 ACE를 추가하여 재귀적으로 모든 개체에 대한 전체 제어를 부여합니다.

마지막으로, DACLs가 있는 전체 robocopy 복사를 수행하여 로그가 있는 대상으로 복사합니다. 로그를 검토하여 추가 권한 문제나 파일 잠금을 확인하고 나중에 추가적인 델타 동기화를 수행할 수 있습니다.

> takeown /F .\test /R /A /D Y
> icacls .\test /grant "Administrators":(OI)(CI)F /T
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

모든 파일과 디렉토리의 소유자로 관리자 그룹을 재귀적으로 강제로 설정합니다. 이에는 우회할 수 있는 방법이 있지만, 일반적으로 가장 강력한 방법이며 가장 빠릅니다.

> takeown /F .\test /R /A /D Y

우리가 소유자가 되면 이제 DACL의 모든 개체에 대해 새로운 ACE를 강제로 삽입할 수 있습니다. 이렇게 하면 관리자에게 상속이 활성화되어 관리자에게 전체 제어 권한이 부여됩니다.

이를 루트에서 상속으로 설정하면 환경을 커버할 수 있지만, 공유에 “CREATOR OWNER”와 “전체 제어” (이는 유감스럽게도 파일 사용자 프로필 저장소와 같은 경우에 심지어 Microsoft의 권장 사항입니다)가 있는 경우 사용자는 상속을 비활성화하거나 ACE를 자유롭게 제거할 수 있습니다. 따라서 강력한 방법이 일반적으로 가장 빠른 해결책입니다.

> icacls .\test /grant "Administrators":(OI)(CI)F /T

대부분의 파일에 대한 DACL을 변경한 후 파일을 새 위치로 복사하려고 시도합니다. 이는 파일 공유 마이그레이션과 같은 작업에서 일반적으로 사용됩니다. 이를 위해 항목을 재귀적으로 복사하며 데이터/속성/타임스탬프/DACL을 복사하기 위해 /SEC 스위치를 사용합니다.

그런 다음 작업을 로그에 경로와 모든 개체에 대해 기록하므로 일반적으로 경로 길이나 파일 잠금과 관련된 <5%의 오류를 해결하고 더 세분화할 수 있습니다(/V 자세한 스위치).

> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

이는 사용자 경험에 최소한의 영향을 미치며 파일 공유 마이그레이션을 관리하기 위한 간단한 프레임워크입니다. 또한 IT가 데이터를 보다 잘 제어할 수 있도록 개선합니다. 소유권이 제대로 자식 폴더 수준에서 관리되는 강력한 데이터 거버넌스 프랙티스가 있는 경우, 이는 더 복잡한 논의가 될 수 있지만, 대부분의 고객은 상속과 그룹 기반 ACE만 사용하는 경우가 많으므로 이는 가장 일반적인 상황 및 시작점으로 사용되는 해결책입니다.

Robocopy 대체제

Robocopy는 멋진 도구이지만, 관심을 끌 수 있는 많은 유사한 도구들이 있습니다.

  • xxcopy – 다양한 옵션이 있는 유사한 명령줄 유틸리티입니다.
  • Copy-Item PowerShell cmdlet – 기능은 훨씬 덜하지만 훨씬 간단합니다.
  • TreeSize – 폴더 정보를 찾을 수 있는 GUI 및 스크립트 가능한 유틸리티입니다.

요약

Robocopy는 대용량 파일 세트를 복사하기 위한 탁월한 도구입니다. 데이터 이전, 폴더 동기화 또는 파일을 정확하게 복사하기 위해 빠르게 필요한 경우 Robocopy는 훌륭한 선택입니다.

Source:
https://adamtheautomator.com/robocopy/