Windows'ta dosya kopyalandığında dosya öznitelikleri nasıl korunur?


41

Linux'ta basitçe şunları yapabiliriz:

cp -pr directory

Bunu Windows'ta nasıl yaparsınız? Windows Gezgini'nde yapılabilir mi? Herhangi bir GUI aracı önerisi var mı?

NTFS izinlerini ve oluşturma / değiştirme / erişim zamanını saklayabilirsem en iyisi olur. En azından, dosyalar ve dizinler için değişiklik tarihini korumam gerekiyor . Windows Explorer'ın kopyası, dizinlerin değişiklik tarihini korumaz.



1
Bunun bir kopya olduğunu sanmıyorum. Dosya oluşturma süresi, dosya özniteliklerinden yalnızca biridir.
netvope

Bu soruya verilen cevaplar, tüm zaman damgalarını, zamanı, zamanı ve zamanı koruyacak bir yazılım sunar.
John T.

Bu ilginizi çekebilir: support.microsoft.com/kb/310316 . Ne yazık ki bu kayıt defteri anahtarlarının bazıları artık Vista'da ve üzerinde çalışmıyor.
Amro

robocopy c:\folderA c:\folderB /mir /ittüm ihtiyacın olan. Bunun tamamen c: \ folderB'yi sileceğini ve c: \ folderA'yı yansıtan yeni bir c: \ folderB yaratacağını unutmayın.
Pacerier

Yanıtlar:


6

Bunu Windows'ta yapmanın basit bir yolu yok. Dosyaların oluşturulma tarihlerini koruyabildiğini iddia eden birkaç program var. Http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html   (Kırık link; Wayback Machine'de değil)
hile yapabilecek birkaç program .

Sadece Windows Gezgini'ni kullanmak mümkün değil. CopyFile, CopyFile işlevi (winbase.h) belgelerine bakarsanız, konunun önlendiğini göreceksiniz. Ancak  CopyFile işlevi (Windows Geliştirici Önizlemesi) (aynı URL’nin 2012 arşivi) şöyle diyor:

Dosya zamanları anlambilimi

Bu makale, dosya oluşturma / değiştirme / erişim zamanları ile ilgili anlambilgileri belgelemelidir.

Oluşturma zamanı: Hedef dosya zaten mevcutsa, yaratma zamanı korunur , aksi takdirde mevcut sistem zamanına ayarlanır.
Son Değiştirme zamanı: her zaman kaynak dosyanın değiştirilme zamanından kopyalanır.
Son Erişim zamanı: daima geçerli sistem zamanına ayarlayın.


Bağlantı koptu.
Smile4ever,

21

RoboCopy, / DCOPY: T anahtarını içeren dizinler için mtime değerini koruyabilir, ancak bu yalnızca Vista ve daha yenisinde çalışır. ACL'leri de koruyabilir. Alternatif olarak, FastCopy dizin zamanlarını, ACL'leri ve ADS'leri koruyacak şekilde yapılandırılabilir .


Windows robocopy'de, bunu yapmak için önerilen yöntem yalnızca dosya / klasör özniteliklerini kopyalamakla kalmaz, aynı zamanda tüm kopya işlemi boyunca uygun dosya bütünlüğü ve hata işlemesi sağlar.
megamorf

@megamorf: Robocopy ne şekilde özel bir şey yapar? Herhangi bir veri sağlama veya karmaşa yapmaz, tıpkı neredeyse tüm diğer programlar gibi hataları bildirmek için işletim sistemine güvenir.
afrazier

Şimdilik robokopinin sağlama öncesi sağlama öncesi karşılaştırma özelliği bulunmadığını kabul ediyorum. Ancak genel olarak, bir hata oluştuğunda robokopi tüm dosyayı yeniden iletir. Bir dosyanın geri kalanını hedefe yazmaya devam etmek istiyorsanız, bir dosyayı tekrar doldurmadan bir hata oluştuktan sonra / Z anahtarını belirtirsiniz.
megamorf

@ afrazier, Neden sadece kullanmıyorsun /mir?
Pacerier

2
@Pacerier, çünkü soru bir ağacı yansıtmakla ilgili değil, dosya ve klasörleri kopyalamak ve olabildiğince fazla meta veriyi korumakla ilgili. Yalnızca /mirhedef klasördeki verileri kaldırmakla kalmaz , aynı /dcopy:tzamanda dizin zamanlarını /copyallkorumak ve dosya zaman damgalarından daha fazlasını korumak için de ihtiyacınız olur .
afrazier,

19

... veya sadece bir zip arşivi oluşturabilir (sıkıştırma yöntemi yalnızca "Mağaza" olarak ayarlanmış) ve sonra kopyalamak istediğiniz dosyaları açabilirsiniz. Tarih / saat özellikleri orijinal dosyalarla aynıdır.


İyi fikir. Ama bu dosya özellikleri ve etc vb gibi "diğer şeyler" üzerine kopyalar mı?
Pacerier

2
Bu her zaman işe yaramaz. Örneğin 7-zip ile 7zip sıkıştırması kullanmak dosya zamanlarından birini korumaz (hangisini unuttum). Dizin sürelerini korumaz (hatırladığım gibi), ZIP ile hem oluşturulmuş hem de değiştirilmiş süreleri koruyabilirsiniz, ancak 7zip yalnızca çektiğiniz süreye bağlı olarak zamanların bazılarını tutar: program menüsünden sürükle ve bırak veya çıkar . İyi test et, genç çekirge.
Jon,

3
Çok teşekkür ederim, bu benim için iyi çalıştı. ZIP biçiminde 7zip kullandım (oluşturma tarihi 7Z biçiminde korunmuyor).
17'de

Bunu yapmak için kullanacağınız belirli komutu ekleyebilir misiniz? Önerdiğiniz sıkıştırma yöntemini kullanmak için belirli bir komut örneği? Bu, bir öneri veya yorumun aksine "daha tam bir Cevap" anlamına gelir. Ayrıca, sayısız insanı, önerinizi nasıl yerine getireceğinizi bulmak için bir arama yapmak zorunda kalmazdı. Ayrıca, bir bonus olarak, bir bağlantı olarak Bu yöntem hakkında daha fazla bilgi içeren bir dokümana veya makaleye müthiş olur.Tüm bilgiyi sağlamak, herkesi (arama) tekerleğini yeniden icat etmekten kurtarır ve önemli ölçüde artırabilir.Teşekkürler!
SherylHohman

6

Robocopy komut satırı aracı (çoğu pencere sürümüyle birlikte gelir)
Windows 10 makinemdeC:\Windows\System32

Gönderen Wikipedia , bu dosya korumak için çeşitli seçenekler şu seti ile kullanılabilir ve dizin zaman damgaları, hem de diğer özelliklerini:

Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPYALL /E /R:0

  • /DCOPY:TOrijinal Dizinlerin Zaman Damgalarını koru (XP026 veya daha sonraki sürümler gerektirir)
  • /E: Boş Dizinler dahil, dizinleri tekrar tekrar kopyala
  • /R:0: kilitli dosyaları tekrar denemeyin (başarısız kopyalarda yeniden deneme sayısı varsayılan değerdir 1 milyondur),

  • /COPYALL: Tüm dosya bilgilerini kopyalayın
    (eşdeğer /COPY:DATSOU, nereye

    • D= Veri,
    • A= Nitelikler,
    • T= Dosya Zaman Damgaları ,
    • S= Güvenlik = NTFS ACL’leri,
    • O= Sahip bilgisi,
    • U= Denetim bilgisi),

Eğer varsa sadece tarih ve dizin damgaları korumak istiyorum, ama bunu değil boş alt dizinleri üzerinde kopyalanmasını istediğiniz ve do not diğer özellikleri o zaman kullanabilir korunmuş istiyorum:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

nerede /Skopyalar Boş olmayan alt dizinleri

Sözdiziminin tamamını görmek için robocopy /?komut istemine yazın veya şu blog yayınlarına bakın: https://ss64.com/nt/robocopy.html ve https://techjourney.net/robocopy-syntax-command-line -anahtarlar-ve-örnekler /

Son zamanlarda koştuğum bir komut örneği:
Robocopy D:\ C:\D_backup /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

2 alt dizinin hariç tutulmasının /XDbayrağın iki kez kullanılmasını gerektirdiğine dikkat edin . Ayrıca, ikinci dizin dışlama tırnak işaretleri kullanır çünkü dizin adında boşluk vardır.

Son olarak, /Lkomutu gerçek için yapmadan önce sınamak için bayrağı ekleyebilirsiniz . Bu şekilde, istemediğiniz herhangi bir dizini / dosyayı kopyalamayacağını (veya kaldırmayacağını) ve komutunuzda hata olmadığını doğrulayabilirsiniz.

Düzenleme: bir Kök Dizinden (aka sürücü) bir Klasöre (kök olmayan dizin) kopyalarken gotcha

Yukarıdaki örnek komutu çalıştırdıktan sonra, dizin görünmüyordu! (Yine de show hidden filesve show system filesWindows 10'da kontrol edildi!) Https://serverfault.com/a/455029/399723 uyarınca aşağıdaki komutu düzeltti:

attrib -h -s C:\D_backup

Alternatif olarak, /A-:SH"Gizli Özniteliği Sistem dosyalarından ayarsız hale getirir " ifadesinin eklenmesi , böylece https://serverfault.com/a/565804/399723 uyarınca dizinin ilk sırada gizlenmesini önleyebilir . Ayrıca bkz . Https://ss64.com/nt/robocopy.html .
Bu soygun , bu seçenek üzerine bir çözüm olarak daha fazla ışık tutuyor.

Robocopy D:\ C:\D_backup /A-:SH /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR

Diğer Yazılımlar:

Alternatif olarak, komut satırını kullanmak istemiyorsanız robokopinin GUI sürümünü indirebilirsiniz .

Başka bir windows yardımcı programı XCopy'dir , ancak Windows 10'da bulunmasına rağmen kullanımdan kaldırılmıştır. Gotchas için bağlantıya bakınız.

RoboCopy için Wikipedia sayfası (bu yayının üstüne bağlı), kullanılabilecek başka yazılımları listeler.


1
İyi cevap. İlki biraz modası geçmiş olduğu için seçilen kişi olmalı. Müşterinin yedeklerinden boş dizinleri kesmek için Windows 7'den bu yana kullanılan robokopi kullanıldı, ancak Windows XP'den beri kullanılabildiğini düşünüyorum
DGoiko

@DGoiko Sanırım haklısın. Kesinlikle Windows 7 ile birlikte kullandım. Ne yazık ki, özel Windows 7 Pro dizüstü bilgisayarları satın almak artık bir seçenek değil. Bu yüzden şimdi Win 10'um var. XP aldığımda hiç bakmadığımı sanmıyorum ama uzun zaman oldu. Sadece çok iyi bilinen değil.
SherylHohman

Robocopy GUI mükemmel.
Eddie Kumar

4

Senkronize et! 3.5 tüm zaman damgalarını tutar (dosyalar ve klasörler, değişiklik ve oluşturma). Windows XP'de bildiğim tek yazılım Robocopy'nin yanında ve bunu kusursuzca denedim. Bununla birlikte, FlashGet veya Orbit Downloader gibi bir yazılım kullanılarak indirilen kaynak dosyaları olan bozuk dosyalar üretebilir (sonuçta elde edilen dosyalar aynı boyutta ancak yalnızca 25kB gerçekte kopyalanır - gerisi sıfırlarla doldurulur). Yazılımın yaratıcısına nedenini çözüp çözemediğini sordum, ancak hiçbir fikri yoktu; Sanırım bu tür yazılımların dosyaları küçük paketler halinde indirmesi (hızı optimize etmesi amaçlandı) ve veri bölümüm büyük oranda parçalandı.

Robocopy XP026 gerçekten de Windows Vista'ya dahil ancak Windows XP'de çalışıyor. Arama "Robocopy XP026" ya da dosyayı bulmak çok kolay olmadığı için buraya gönderebilirim. Veya Robocopy GUI'yi yükleyebilir ve ardından robocopy.exedosyayı System32 dizininde arayarak komut satırından kullanabilirsiniz. Elimdeki dosya 208kB ve sürüm numarası 5.1.2600.26.

Yine de, "yedekleme modu" ile ilgili bir hata var gibi görünüyor:

http://msmvps.com/blogs/martinzugec/archive/2008/03/03/ugly-bug-in-robocopy-ignoring-security-on-file-level.aspx

Robocopy sürüm XP027, görünüşe göre artık bu hataya sahip değil, ancak Windows XP'de çalışmıyor.


Dosya indirme yardımcı programları (Bittorrent gibi) dosyanın tam boyutunu diskte (0 ile doldurulmuş) ayırır ve bölümleri dosyada doğru yere yerleştirerek birden fazla kaynaktan yükleyin. Başlatıldığında dosyalar çok fazla 0000 olacaktır. Dosya ya hiç indirilmedi ya da Eşitle! çok fazla 0000 gördüm ve kopyadan vazgeçti.
Chloe

Teşekkürler! Senkronize et! O da çok hızlı! SyncToy ve Unison dosya değiştirme zamanlarını karıştırıyorlardı. Unison, Cygwin semboliklerine zarar veriyordu. SyncToy hedefte bir kavşakta olduğu ortaya çıkan “Müziğim” i bile kopyalıyordu;
Chloe



1
xcopy *.* C:\temp\Pics /c /d /e /h /i /k /q /r /s /x /y

Hangi anahtarın dosya tarihini koruduğundan emin değilim, ancak bu çalışıyor. Sonra daha önce de belirtildiği gibi dosya tarihlerini koruyan C: \ temp \ Pics dizinini sıkıştırıyorum.


1
Kopyanın sıkıştırılması bu tartışmaya nasıl uyuyor?
Scott

[Sıkıştırılmış] dosyalar için zaman damgası tutarak da soruyu soran kişiyi meşgul edecek gibi görünen bir şey. Bir şey değil Scott. Bu, doğru cevap değilse de faydalı bir cevap verir.
amn

Bu, dosya tarih / saatini korur ancak klasör için yapmaz.
barneco

1

Benim için en basit yöntem, şu ana kadar "gönder" yöntemidir. Herhangi bir harici uygulamaya ihtiyaç duymaz. Deneyimlerime göre, orijinal dosya özniteliklerinin tümünü korur.

Daha önce kullandığım yöntem sıkıştırma / zip klasörü metoduydu. Her ne kadar bu dosyalar kesinlikle kopyalandığından değil, aynı zamanda hem sıkıştırılırken hem de sıkıştırılırken işlenip sıkıştırıldığından daha uzun sürecektir.

%appdata%\Microsoft\Windows\SendTo
veya. C:\Users\_______\AppData\Roaming\Microsoft\Windows\SendTo

Kopyalanmasını istediğiniz klasöre bir kısayol ekleyin sendto; kopyalamak istediğiniz bir dosyayı sağ tıkladığınızda , öğe menünüzde görünecektir .


"Sağ Tıkla> Gönder" seçeneğini kullanarak hilenizi paylaştığınız için teşekkür ederiz. Oluşturma tarihi hariç çalışır. Daha önce, ben yerli xcopy komutunu kullanıyordu: xcopy Source Destination /kes. ( kBayrak, değişiklik zaman damgasını korumayı sağlar, ancak oluşturma tarihi korunmaz). Sıkıştırma yöntemi zip (veya rar) için iyi bir yöntemdir, ancak genellikle çok uzun sürüyor.
OuzoPower

0

Klasörleri ve dizinleri taşımak ve oluşturma tarihini korumak hala basittir. Sadece Shiftklasörü basılı tutup yeni konuma sürükleyin (move komutu). Değiştirilme Tarihi şu anki tarih olacaktır ancak Oluşturulan Tarih orijinal tarihi koruyacaktır.


2
BUNU YAPMA! Bu, dosyaları orijinal klasörden siler. Bunu yapmaya çalışarak telefonumdaki kurtarılamayan verileri kaybettim (CTRL + Z çalışmıyor).
BadAtPHP


0

xcopy bunun için iyi çalışıyor. Sadece özellikleri kopyalamak için / k bayrağını belirtin.

Sözdizimi
xcopy Source [Hedef] [İsteğe bağlı parametreler]

Xcopy komutu bir veya daha fazla dosyayı veya dizin ağacını bir konumdan diğerine kopyalayabilir. Xcopy komutu, Windows 95'ten Windows 8'e kadar tüm Windows sürümlerinde bulunur.


1
/KParametreyi daha yeni denedim ve oluşturma tarihlerini korumadı.
CoDEmanX

Bana bazen çalışıyor ve bazen çalışmıyor gibi geliyor - en iyi pencereleri;)
SebastianH

0

Bunu başardım

rsync -avu --modify-window = 3602 kaynak_dizini / target_directory /

(bu gerçekten bir dizinden diğerine aynaya senkronizasyon aracı olarak kullanılır ve timewindow seçeneği, windows sistemlerinin saatlerce gün ışığı tasarrufu vb. için linux sistemlere göre saatlerini 1 saat hareket ettirmesi gibi sorunları önlemek içindir)

pencerelerin içindeki cygwin ortamında veya windows sürücüleri monte edilmiş olarak pencerelerin içindeki linux sanal makinesinde (örneğin, sanal kutuda)

NB cygwin ve virtualbox hem ücretsizdir, hem de pencerelerde daha az veya daha fazla linux işlevselliğine sahip olmanıza olanak sağlar - ikisi de biraz kurulum gerektirir - özellikle sanal kutu, ancak birçok faydası vardır.

Benim kendi sorunum, dosyaların doğru zamana sahip olmasıydı ancak dizinler yoktu. rsync, dizinlerdeki tarihleri ​​ve dosyalardaki tarihleri ​​de sıraladı.


0

Bu komut dosyalar için aynı zaman damgasını kopyalar. Klasörlerin kendileri için tam olarak aynı anda damgalamadığını unutmayın. Ayrıca, hem kaynağın (Temp1) hem de hedefin (Temp2) etrafına tırnak koyduğumu unutmayın. Bu, yollarda boşluk olması durumunda yapılır. Hiç yerim yok ama en kötü durum senaryoları için eklemem gerektiğini düşündüm.

robocopy /E /copy:DAT "C:\Temp1" "c:\Temp2"

Zaman damgalarını klasörler için de aynı tutmak için:

robokopi / E / kopya: DAT / dcopy: DAT "C: \ Temp1" "c: \ Temp2"

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.