sourcecode

로보카피가 파일을 덮어쓰도록 하려면 어떻게 해야 합니까?

copyscript 2023. 11. 5. 14:55
반응형

로보카피가 파일을 덮어쓰도록 하려면 어떻게 해야 합니까?

일반적으로 로보카피는 마지막으로 쓴 날짜와 파일 크기가 같은 파일을 무시합니다.어떻게 하면 이 디자인에서 벗어날 수 있을까요?로보카피로 덮어쓰기를 강요하고 싶습니다.

저는 그 dst\sample을 예상했습니다.txt는 test001로 적어야 합니다.그러나 이 파일들은 로보카피가 동일한 파일로 인식하고 덮어쓰지 않습니다.이 경우 "/IS" 옵션은 유효하지 않습니다.

New-Item src -itemType Directory
New-Item dst -itemType Directory
New-Item src\sample.txt -itemType File -Value "test001"
New-Item dst\sample.txt -itemType File -Value "test002"
Set-ItemProperty src\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"
Set-ItemProperty dst\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"

ROBOCOPY.exe src dst /COPYALL /MIR
Get-Content src\sample.txt, dst\sample.txt
> test001
> test002

ROBOCOPY.exe src dst /COPYALL /MIR /IS
Get-Content src\sample.txt, dst\sample.txt
> test001
> test002

설명서에서:

/is동일한 파일을 포함합니다./it"tweaked" 파일을 포함합니다.

"Same files"는 동일한 파일(이름, 크기, 시간, 속성)을 의미합니다."Tweaked files"는 이름, 크기, 시간은 같지만 속성은 다른 파일을 의미합니다.

robocopy src dst sample.txt /is      # copy if attributes are equal
robocopy src dst sample.txt /it      # copy if attributes differ
robocopy src dst sample.txt /is /it  # copy irrespective of attributes

Super User에 대한 답변은 선택 매개변수가 일치하는 파일의 종류에 대해 잘 설명합니다.

그 말로, 당신이 설명한 행동을 재현할 수 있었습니다만, 제가 이해한 문서와 결과에 따르면robocopy내 테스트에서 생성된 것입니다. 나는 이것을 버그라고 생각할 것입니다.

PSC:\temp> 새 항목 src - 유형 디렉터리 > $nullPSC:\temp > New-Item dst -Type Directory >$nullPSC:\temp> New-Item src\sample.txt -Type File - 값 "test001" > $nullPSC:\temp> New-Item dst\sample.txt -Type 파일 - 값 "test002" > $nullPSC:\temp> Set-ItemProperty src\sample.txt - 이름 마지막 쓰기 시간 - 값 "2016/1/11 15:00:00"PSC:\temp> Set-ItemProperty dst\sample.txt - 이름 마지막 쓰기 시간 - 값 "2016/1/11 15:00:00"PSC:\temp> robocopy srcdst 샘플.txt /is /it /copyall /mir...옵션 : /S/E/COPYALL/PURGE/MIR/IS/R:1000000/W:30------------------------------------------------------------------------------1 C:\temp\src\수정된 샘플 7개.txt------------------------------------------------------------------------------복사된 총 건너뛰기 불일치 오류 추가 항목Dirs : 1000 000파일 : 110000바이트 수 : 77000000...PSC:\temp> robocopy srcdst 샘플.txt /is /it /copyall /mir...옵션 : /S/E/COPYALL/PURGE/MIR/IS/R:1000000/W:30------------------------------------------------------------------------------1 C:\temp\src\똑같은 7개의 샘플.txt------------------------------------------------------------------------------복사된 총 건너뛰기 불일치 오류 추가 항목Dirs : 1000 000파일 : 110000바이트 수 : 77000000...PSC:\temp> Get-Content .\src\sample.txttest001PSC:\temp> Get-Content .\dst\sample.txttest002

파일은 복사된 파일로 나열되며, 첫번째 파일 이후에는 동일한 파일이 됩니다.robocopy최소한 시간이 동기화된 상태에서 실행합니다.그러나 출력에 따라 7바이트가 복사되었지만 데이터 플래그가 설정되어 있음에도 불구하고 두 경우 모두 대상 파일에 실제로 데이터가 기록되지 않았습니다./copyall). 데이터 플래그를 명시적으로 설정해도 동작이 변하지 않습니다(/copy:d).

나는 마지막 쓰기 시간을 수정해야 했습니다.robocopy데이터를 실제로 동기화할 수 있습니다.

PSC:\temp> Set-ItemProperty src\sample.txt - 이름 마지막 쓰기 시간 - 값(Get-Date)PSC:\temp> robocopy srcdst 샘플.txt /is /it /copyall /mir...옵션 : /S/E/COPYALL/PURGE/MIR/IS/R:1000000/W:30------------------------------------------------------------------------------1 C:\temp\src\100% 새로운 7 샘플.txt------------------------------------------------------------------------------복사된 총 건너뛰기 불일치 오류 추가 항목Dirs : 1000 000파일 : 110000바이트 수 : 77000000...PSC:\temp> Get-Content .\dst\sample.txttest001

추악한 해결책은 동일한 파일의 마지막 쓰기 시간을 강제로 변경하는 것입니다.robocopy데이터 복사하기:

& robocopy src dst /is /it /l /ndl /njh /njs /ns /nc |
  Where-Object { $_.Trim() } |
  ForEach-Object {
    $f = Get-Item $_
    $f.LastWriteTime = $f.LastWriteTime.AddSeconds(1)
  }
& robocopy src dst /copyall /mir

로 전환하는 것이 최선의 방법일 것입니다.

& xcopy src dst /k/r/e/i/s/c/h/f/o/x/y

정말 이상한데, 왜 아무도 /IM 스위치를 언급하지 않습니까?!백업 작업에서 오랫동안 사용해 왔습니다.하지만 방금 구글링을 해봤는데 MS 웹사이트에서도 그에 대해 아무것도 말해주지 않는 웹페이지에 착륙할 수가 없었어요!!!또한 같은 문제에 대해 불평하는 사용자 게시물을 많이 발견했습니다!!

아무튼..소스 또는 대상의 크기나 시간에 상관없이 로보카피를 사용하여 모든 을 덮어쓰려면 명령에 이 세 개의 스위치를 포함해야 합니다(/IS/IT/IM).

/IS :: Include Same files. (Includes same size files)
/IT :: Include Tweaked files. (Includes same files with different Attributes)
/IM :: Include Modified files (Includes same files with different times).

대부분 1GB 이상의 파일(ISO - Disk Images - 4K Videos)의 몇 테라바이트 전송에 사용하는 정확한 명령어입니다.

robocopy B:\Source D:\Destination /E /J /COPYALL /MT:1 /DCOPY:DATE /IS /IT /IM /X /V /NP /LOG:A:\ROBOCOPY.LOG

당신을 위해 작은 테스트를 해봤습니다.결과는 다음과 같습니다.

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :      1028      1028         0         0         0       169
   Files :      8053      8053         0         0         0         1
   Bytes : 649.666 g 649.666 g         0         0         0   1.707 g
   Times :   2:46:53   0:41:43                       0:00:00   0:41:44


   Speed :           278653398 Bytes/sec.
   Speed :           15944.675 MegaBytes/min.
   Ended : Friday, August 21, 2020 7:34:33 AM

대상, 디스크: WD Gold 6TB(쓰기 속도와 내 결과 비교)

"Extras"를 사용하더라도, 이는 "/X" 스위치 때문에 보고하기 위한 것입니다.아무것도 건너뛴 것이 없고 모든 파일의 총 개수와 크기가 복사된 것과 같습니다.가끔은 내가 그것을 남용하고 작동 중에 여러 번 취소할 때 적은 수의 건너뛴 파일을 보여주지만 처음 2열의 값은 항상 같습니다.또한 대상에 있는 모든 파일을 검색하고 모든 타임스탬프의 보고서를 생성하는 PowerShell 스크립트를 실행하여 한 번 확인했습니다.

그것과 함께 내 역사에서 얻은 몇 가지 성과 팁과 많은 테스트와 문제들!

. 대부분의 온라인 사용자들이 최대 쓰레드 "/MT:128"을 사용할 것을 권하고 있지만, 이는 최고의 성능을 얻기 위한 일반적인 방법이기 때문입니다.파일 크기가 매우"/MT:128"을 사용하지 마십시오. 이는 큰 실수이며 여러 번 실행하면 드라이브 성능이 크게 저하됩니다.이는 매우 높은 조각화를 일으키거나 심지어 파일 시스템에 장애를 초래할 수도 있으며, 결국 RAW 파티션을 복구하는 데 귀중한 시간을 소비하게 됩니다.그리고 무엇보다도 4-6배 더 느린 성능을 보여줄 것입니다!!

매우 큰 파일의 경우:

  1. "하나" 스레드 "/MT:1"만 사용 | 영향: BIG
  2. 버퍼링을 사용하지 않으려면 "/J"를 사용해야 합니다.| 영향: 높음
  3. "/LOG:file"과 함께 "/NP"를 사용하고 "/TEE"가 콘솔에 출력하지 않음 | 영향:중간의.
  4. 소스 또는 대상과 별도의 드라이브에 "/LOG:file"을 놓습니다. | Impact: Low.

일반적인 빅 파일의 경우:

  1. 다중 스레드를 사용하면 "/MT:4"를 초과하지 않습니다. | 영향: BIG
  2. 대상 디스크의 캐시 사양이 낮은 경우 "/J"를 사용하여 버퍼링을 사용하지 않도록 설정합니다. | 영향: 높음
  3. & 위와 같은 4.

수천 개의 작은 파일의 경우:

  1. 미친 듯이 :) 다중 스레드를 사용하면 디스크 성능을 모니터링하면서 처음에는 16개로 시작하고 2개로 다중화할 것입니다.일단 떨어지기 시작하면 다시 이전 값으로 돌아가 계속 사용할 것입니다. | 영향: BIG
  2. /J를 사용하지 않음 | 임팩트: 높음
  3. "/LOG:file"과 함께 "/NP"를 사용하고 "/TEE" | Impact:HIGH"로 콘솔에 출력하지 않습니다.
  4. 소스 또는 대상과 별도의 드라이브에 "/LOG:file"을 넣습니다. | Impact:HIGH.

홈 폴더의 경우 모든 폴더가 해당 사용자의 데스크톱에 있고 적절한 권한이 없는 바로 가기를 통해 도달할 수 있어 사용자가 있어도 볼 수 없는 홈 폴더에 대해 이 작업을 수행했습니다.그래서 매개 변수와 함께 로보카피를 사용하여 파일을 올바른 설정으로 덮어씁니다.

FOR /F "tokens=*" %G IN ('dir /b') DO robocopy  "\\server02\Folder with shortcut" "\\server02\home\%G\Desktop" /S /A /V /log+:C:\RobocopyShortcut.txt /XF *.url *.mp3 *.hta *.htm *.mht *.js *.IE5 *.css *.temp *.html *.svg *.ocx *.3gp *.opus *.zzzzz *.avi *.bin *.cab *.mp4 *.mov *.mkv *.flv *.tiff *.tif *.asf *.webm *.exe *.dll *.dl_ *.oc_ *.ex_ *.sy_ *.sys *.msi *.inf *.ini *.bmp *.png *.gif *.jpeg *.jpg *.mpg *.db *.wav *.wma *.wmv *.mpeg *.tmp *.old *.vbs *.log *.bat *.cmd *.zip /SEC /IT /ZB /R:0

(혹시나리오를 대비하여) 무시하도록 설정한 파일 형식이 많으므로 필요한 경우 또는 시나리오에 맞게 설정하십시오.

윈도우 서버 2012에서 테스트되었으며, 모든 스위치는 마이크로소프트 사이트 등에 문서화되어 있습니다.

언급URL : https://stackoverflow.com/questions/40744335/how-do-i-force-robocopy-to-overwrite-files

반응형