Robocopy SKIP mevcut dosyaları varsayılan olarak kopyalıyor mu?


7

Ben ettik okumak ki (bir yerde) Robocopy varsayılan olarak mevcut dosyaları üzerinde kopyalama atlar.

Ama ... Bunun için hiçbir Komut Satırı anahtarı bulamıyorum .


Clay - Bir şans yakaladığınızda, şu anki cevabımı (aşağıdan) en yeni formatta okuyunuz, birisi bir şeyi işaret etmiş ve birkaç defa okuduktan sonra, yazının daha net olması için yazıyı temizlemek zorunda kaldım. daha önce net değildi ama umarım şu anki formatta düzelttim ve öyleyse, sizden ne beklediğimi sizden duymayı dört gözle bekliyorum. ...
Pezevenk Suyu BT

Yanıtlar:


4
robocopy SOURCE DESTINATION FILE(S) /IS

Nerede ISaçılımı Ben nclude S ame dosya (lar). Bu anahtarın kullanılması, mevcut dosyaların üzerine yazılmasına neden olur. Aşağıya bakınız:

::
:: File Selection Options :
::
                 /A :: copy only files with the Archive attribute set.
                 /M :: copy only files with the Archive attribute and reset it.
    /IA:[RASHCNETO] :: Include only files with any of the given Attributes set.
    /XA:[RASHCNETO] :: eXclude files with any of the given Attributes set.

 /XF file [file]... :: eXclude Files matching given names/paths/wildcards.
 /XD dirs [dirs]... :: eXclude Directories matching given names/paths.

                /XC :: eXclude Changed files.
                /XN :: eXclude Newer files.
                /XO :: eXclude Older files.
                /XX :: eXclude eXtra files and directories.
                /XL :: eXclude Lonely files and directories.
                /IS :: Include Same files.
                /IT :: Include Tweaked files.

Evet, OP'nin gerçekten bilmek istediği şeyde biraz karışıklık var. Robokopinin varsayılan olarak kopyaları atlamasına neden olan bir anahtar arıyormuş gibi görünüyor (varsayılan olarak! Kendi kendini tanımlayıcı!) Bu yüzden üzerine yazma özelliğini etkinleştirmek için tam tersini gösterdim.
NetwOrchestration

2

Varsayılan olarak, Robocopy, dosyaların belirli meta verileri eşleşirse mevcut dosyaları kopyalamayı atlar, ardından bu dosyalar kopyalama işleminden atlanır.

@ Mklement0 tarafından belirtildiği gibi, /COPY:DAT[LastWriteTime] ve dosya boyutu aynıysa ve bu varsayılan bir atlama ise , zımni varsayılan farklı veriler içeren dosyalara kopyalamaz.

Bu nedenle, bir nedenden dolayı, verileriniz farklı olsa bile, eşleşen dosya boyutuna, dosya adına ve en son değiştirilmiş özniteliklere sahip iki dosyaya sahipseniz, kaynak dosyayı kopyalamaz.

Robocopy Varsayılan Seçenekler: /DCOPY:DA /COPY:DAT /R:3 /W:1


Robocopy veya Robocopy /?

 /COPY:copyflag[s] : What to COPY (default is /COPY:DAT)
                      (copyflags : D=Data, A=Attributes, T=Timestamps
                       S=Security=NTFS ACLs, O=Owner info, U=aUditing info).

Söyleyebileceğim kadarıyla, aynı-atla aynı mantığı (ima edilen) /COPY argümanı ile ilgisi yoktur . Spesifik olarak, sadece bir dosyanın boyutu ve en son değiştirilen zaman damgası önemli görünüyor.
mklement0

Evet: Aynı son değiştirilmiş zaman damgasına ve aynı dosya boyutuna sahip 2 dosya, içerikleri farklı olsa bile (egzotik bir senaryo) net olarak kabul edilir. Ne /COPYaktardığınız, aynılığı belirleme açısından önemli değil - yalnızca hedef dosya farklı kabul edilirse kopyalanacak olanlara uygulanır .
mklement0

@ mklement0 - Size şunu soracağım .... eğer iki dosya aynı boyutta ve ikinci veya mikrosaniyede son değiştirilen aynı tarihse veya her neyse, ne olursa olsun, atılan eylemin bu koşula dayanmasını ne tavsiye edersiniz? Bu "duruma göre duruma göre" mi yoksa "hedefe varsayılan kopya" mı olmalı?
Pezevenk Suyu BT

Robocopy'nin davranışı, tarif ettiğim senaryonun ne kadar egzotik olduğu göz önüne alındığında makul bir varsayılandır. Yine de, bazen Robocopy'nin şu anda sunmadığı bir şeyi (muhtemelen yalnızca) içeriğe dayalı olarak belirlemek istersiniz . Bununla birlikte, bunların tümü eldeki sorunla /COPYaynıdır: Robocopy'nin hangi dosyaların atlanacağını belirlemek için kullandığı, gerçek anlamda bir algoritma tanımlayamayan kırmızı bir ringa balığı olduğu gerçeği ile /COPY.
mklement0

1
@ mklement0 Tamam, test ettim ve $file.FullName.ForEach{(Get-Item $_).LastWriteTime=$(Get-Date)}tam olarak "aynı boyutta" ve "aynı dosya adı" olan aaaaa2ve aynı aaaaa5içeriğe sahip olmayan dosyalar için aynı olduğunuzu onayladım . RobocopyBelirtilen varsayılan /COPY:DATdeğerinin doğru olduğu komutuyla hiçbir seçenek kullanmamak , zaman damgası ve dosya boyutu aynı olduğunda veriler farklı olduğunda dosyaları kopyalamaz. Varsayılan değer hala /COPY:DATbelgelerde belirtildiği gibidir ve komutun çıktı sonuçları ne olursa olsun gösterilir.
Pezevenk Suyu BT

1
  • Ne yazık ki, resmi belgeler hangi dosyaların varsayılan olarak atlandığının arkasındaki mantığı tanımlamıyor .

  • Resmi olmayan ss64.com belgeleri , ancak, önemli gösterici sağlar (vurgu vurgulu):

    • Robocopy varsayılan olarak yalnızca kaynak ve hedef farklı zaman damgalarına veya farklı dosya boyutlarına sahipse bir dosyayı kopyalar .

Not: zaman damgası en son değiştirilmiş zaman damgasını gösterir (sadece).

Başka bir deyişle: Robocopy olmak iki dosya gördüğü aynı merkezli sadece onların son değiştirilme zaman damgaları ve dosya boyutları özdeş olup olmamasına ve bu nedenle atlar durumunda kopyalama.

Söyleyebileceğim şey:

  • Bu davranış olduğunu değil bir dosya / dizinin hangi yönlerini değiştirerek etkilenen kopyalamak (parametreler /COPY/ DCOPY)

    • Bu argümanlar sadece uygulandığı takdirde RoboCopy temelden aynılık / içerme mantığına göre, kopyalama ihtiyacı olan belirli bir dosya / dizin kabul etti.
  • Varsayılan aynılık algılamayı (aynı son değiştirilmiş zaman damgası ve aynı dosya boyutu) aşağıdaki özelliklere genişletmek istiyorsanız , ( Tweaked Dahil ) seçeneğini kullanın:/IT

    • dosya öznitelikleri ( A/ COPY parametresi için temsil edilir )
    • ACL ( parametre Siçin temsil edilir /COPY)
    • dosya sahipliği ( parametre Oiçin temsil edilir /COPY)
    • denetim bilgisi ( parametre Uiçin temsil edilir /COPY)
  • Robocopy sunuyor görünüyor hayır onların dayalı dosyaların aynılığı tespit seçeneği içeriği (genellikle bir üzerinden uygulanmaktadır kriptografik hash fonksiyonu ).
    Bu nedenle, ender olarak son değiştirilen zaman damgalı ve içeriğinde farklılık gösteren aynı dosya boyutlarına sahip dosyalar olabileceği ender durumlarda , tek seçeneğiniz /IS( Aynı İçeriği ) seçeneğini kullanmaktır:

    • Bu, aynı şekilde değerlendirilen dosyaların koşulsuz olarak kopyalanmasına ve dolayısıyla potansiyel olarak gereksiz yere neden olur.

    • Uyarı : İlginçtir ki, son değiştirilme dosya damgası ve dosya boyutu bakımından aynıdır dosyalar ancak yukarıda belirtilen özellikleri bakımından farklılık vardır değil varsayılan olarak dahil /IStek başına; bu nedenle, tüm olasılıkları karşılamak için kullanın /ISve /IT birleştirin .


Aşağıdaki Pester testleri davranışları göstermektedir; kodu farklı kaydet Tests.ps1ve şu şekilde çağır Invoke-Pester ./Tests.ps1:

Describe RoboCopySkippedFilesTests {
  BeforeAll {
    Push-Location TestDrive:
  }
  AfterAll {
    Pop-Location
  }
  BeforeEach {
    # Set up a source and a destination folder and make their
    # Content the same.
    if (Test-Path dest) { Remove-Item -Force -Recurse dest }
    $null = New-Item -Type Directory -Force src
    'file1' > src\file1
    'file2' > src\file2
    Copy-Item -Recurse src dest
  }

  It "Does not copy anything with identical folders." {
    robocopy.exe src dest
    $LASTEXITCODE | Should Be 0
  }
  It "Does recognize a changed last-modified filestamp" {
    (gi src\file1).LastWriteTime = [datetime]::now
    robocopy.exe src dest # | Out-Host
    $LASTEXITCODE | Should Be 1
  }
  It "Does recognize a change in file size" {
    '!' | Add-Content dest\file1
    robocopy.exe src dest # | Out-Host
    $LASTEXITCODE | Should Be 1
  }
  It "Does not recognize a change in file content, with size and last-modified date identical" {
    'file!' > dest\file1
    (Get-Item dest\file1).LastWriteTime = (Get-Item src\file1).LastWriteTime
    robocopy.exe src dest # | Out-Host
    $LASTEXITCODE | Should Be 0
  }
  It "Does not recognize a change in file attributes, with size and last-modified date identical" {
    (Get-Item dest\file1).Attributes = 'System'
    robocopy.exe src dest # | Out-Host
    $LASTEXITCODE | Should Be 0
  }
  It "Does recognize an attribute-modified-only file as tweaked (/IT)" {
    (Get-Item dest\file1).Attributes = 'System'
    robocopy.exe src dest /IT # | Out-Host
    $LASTEXITCODE | Should Be 1
  }
  It "Does not include an attribute-modified-only file with /IS" {
    Remove-Item src\file2, dest\file2
    (Get-Item dest\file1).Attributes = 'System'
    robocopy.exe src dest /IS # | Out-Host
    $LASTEXITCODE | Should Be 0
  }
}

Tüm testlerin geçtiğini ( Robocopy.exedosya sürümünde olduğu gibi 10.0.16299.15 (WinBuild.160101.0800)) gösteren aşağıdakilere benzer bir şey görmelisiniz :

Describing RoboCopySkippedFilesTests
 [+] Does not copy anything with identical folders. 231ms
 [+] Does recognize a changed last-modified filestamp 112ms
 [+] Does recognize a change in file size 68ms
 [+] Does not recognize a change in file content, with size and last-modified date identical 69ms
 [+] Does not recognize a change in file attributes, with size and last-modified date identical 83ms
 [+] Does recognize an attribute-modified-only file as tweaked (/IT) 65ms
 [+] Does not include an attribute-modified-only file with /IS 70ms
Tests completed in 589ms
Passed: 7 Failed: 0 Skipped: 0 Pending: 0 Inconclusive: 0

İçine kazmak gerekiyor bu daha sadece tekrar aynı boyuttaki dosyalar ve aynı LastWriteTime özniteliği ile ancak farklı içeriğe sahip bir test olduğu gibi aaaaa2ve aaaaa5biraz önce bahsettiğim ve şimdi Robocopy üzerine kopyalamak ve farklı tanıdınız görünüyor örneğin . Createtime'ın kaynak dosyada dest dosyadan daha eski olduğundan ve hala kopyalandığından bile eminim. Sanırım dün testimin bir denetlemesi oldu çünkü bunu tekrar üretemiyorum ve varsayılan DAT veri içeriği farklarını algılamak ve kaynak dosyaya kopyalamak için doğru gözüküyor. Garip ya da ne !!
Pezevenk Suyu BT

@PimpJuiceIT: Lütfen güncellememe bakın; Testler sizin için farklı sonuçlar verirse haberim olsun.
mklement0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.