Bagaimana cara mempertahankan atribut file ketika seseorang menyalin file di Windows?

41

Di Linux, kita cukup melakukan:

cp -pr directory

Bagaimana cara melakukannya di Windows? Bisakah itu dilakukan di Windows Explorer? Adakah saran alat GUI?

Ini akan menjadi yang terbaik jika saya dapat menjaga izin NTFS dan waktu pembuatan / modifikasi / akses. Minimal, saya perlu mempertahankan tanggal modifikasi untuk file dan direktori. Salinan Windows Explorer tidak mempertahankan tanggal modifikasi untuk direktori.

netvope
sumber
1
Saya pikir ini bukan duplikat. Waktu pembuatan file hanya salah satu dari atribut file.
netvope
Jawaban dalam pertanyaan itu menyediakan perangkat lunak yang akan mempertahankan semua cap waktu, waktu, waktu, dan waktu.
John T
Ini mungkin menarik: support.microsoft.com/kb/310316 . Sayangnya beberapa kunci registri ini tidak lagi berfungsi di Vista dan ke atas.
Amro
robocopy c:\folderA c:\folderB /mir /ititu yang kamu butuhkan. Perhatikan bahwa ini akan sepenuhnya menghapus c: \ folderB dan membuat c: \ folderB baru yang mencerminkan c: \ folderA.
Pacerier

Jawaban:

6

Tidak ada cara sederhana untuk melakukan ini di Windows. Ada beberapa program yang mengklaim dapat mempertahankan tanggal pembuatan file.
Berikut adalah beberapa program yang dapat melakukan trik http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html   (Rusak tautan; bukan di Wayback Machine).

Menggunakan Windows Explorer saja tidak mungkin. Jika Anda melihat dokumentasi untuk CopyFile, fungsi CopyFile (winbase.h) , Anda akan melihat bahwa itu menghindari subjek. Tetapi  fungsi CopyFile (Windows Developer Preview) (arsip 2012 dari URL yang sama) mengatakan:

File semantik kali

Artikel ini harus mendokumentasikan semantik sehubungan dengan waktu pembuatan / modifikasi / akses file.

Waktu pembuatan: jika file target sudah ada, waktu pembuatannya akan dipertahankan , jika tidak maka akan disetel ke waktu sistem saat ini.
Waktu Modifikasi Terakhir: selalu disalin dari waktu modifikasi file sumber.
Waktu Akses Terakhir: selalu diatur ke waktu sistem saat ini.

Daisetsu
sumber
Tautan rusak.
Smile4ever
21

RoboCopy dapat menjaga mtime untuk direktori dengan / DCOPY: T switch, tetapi ini hanya berfungsi di Vista dan yang lebih baru. Itu juga dapat melestarikan ACL. Atau, FastCopy dapat dikonfigurasi untuk mempertahankan mtimes direktori, ACL, dan ADSes .

afrazier
sumber
Dalam Windows, robocopy adalah cara yang disarankan untuk melakukan ini karena tidak hanya menyalin atribut file / folder tetapi juga memungkinkan integritas file dan penanganan kesalahan yang tepat selama seluruh proses penyalinan.
megamorf
@megamorf: Dengan cara apa robocopy melakukan sesuatu yang istimewa? Itu tidak melakukan checksumming atau hashing data, itu bergantung pada OS untuk melaporkan kesalahan seperti hampir semua program lainnya.
Afrazier
Saya setuju bahwa sampai sekarang robocopy tidak memiliki fitur perbandingan checksum pra-pos. Tetapi secara umum, robocopy akan mengirim ulang seluruh file ketika kesalahan terjadi. Jika Anda ingin melanjutkan menulis sisa file ke tujuan setelah kesalahan terjadi tanpa mentransmisikan seluruh file lagi Anda menentukan / Z beralih.
megamorf
@afrazier, Kenapa tidak pakai saja /mir?
Pacerier
2
@ Peracerier, karena pertanyaannya bukan tentang mirroring tree, ini tentang menyalin file dan folder dan mempertahankan metadata sebanyak mungkin. Tidak hanya /mirmenghapus data dari folder tujuan, Anda masih memerlukannya /dcopy:tuntuk menyimpan mtimes direktori dan /copyallmenyimpan lebih dari sekadar cap waktu file.
Afrazier
19

... atau Anda bisa membuat arsip zip (dengan metode kompresi diatur ke hanya "Store"), dan kemudian membongkar file di mana Anda ingin menyalinnya. Atribut tanggal / waktu sama dengan file asli.

Ulat sutera
sumber
Ide keren Tetapi apakah ini menyalin "hal-hal lain" seperti properti file dan lain-lain dll?
Pacerier
2
Ini tidak selalu berhasil. Dengan 7-zip misalnya, menggunakan kompresi 7zip tidak mempertahankan salah satu kali file (saya lupa yang mana). Itu tidak mempertahankan waktu direktori (seingat saya), Dengan ZIP, Anda dapat mempertahankan waktu yang dibuat dan dimodifikasi, tetapi 7zip hanya menyimpan beberapa kali tergantung pada bagaimana Anda unzip: apakah Anda menarik dan melepas atau mengekstrak dari menu program . Ujilah dengan baik, belalang muda.
Jon
3
Terima kasih banyak, ini berhasil untuk saya. Saya menggunakan 7zip, dengan format ZIP (tanggal pembuatan tidak disimpan dalam format 7Z).
AFract
Bisakah Anda menambahkan perintah khusus yang akan Anda gunakan untuk melakukan ini? Contoh perintah khusus untuk menggunakan metode kompresi yang Anda sarankan? Ini akan menjadikannya lebih sebagai Jawaban yang lengkap ", sebagai lawan dari lebih banyak saran atau komentar. Itu juga akan menyelamatkan banyak orang dari keharusan melakukan pencarian untuk mencari tahu bagaimana menyelesaikan saran Anda. Juga, sebagai bonus, tautan untuk dokumen atau artikel dengan info lebih lanjut tentang metode ini akan luar biasa. Menyediakan semua info menyelamatkan semua orang dari menciptakan kembali roda (pencarian), dan secara dramatis dapat meningkatkan upvote. Kami berterima kasih!
SherylHohman
6

Alat baris perintah Robocopy (dilengkapi dengan sebagian besar versi windows)
Di mesin windows 10 saya terletak diC:\Windows\System32

Dari Wikipedia , ini dapat digunakan dengan serangkaian opsi berikut untuk menjaga stempel waktu file dan direktori, serta atribut lainnya:

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

  • /DCOPY:Tmelestarikan Stempel Waktu Direktori asli (memerlukan versi XP026 atau yang lebih baru)
  • /E: Salin direktori secara rekursif, termasuk Direktori Kosong
  • /R:0: jangan coba lagi file yang terkunci (jumlah percobaan ulang pada salinan gagal nilai default adalah 1 juta),

  • /COPYALL: Salin semua informasi file,
    (setara dengan /COPY:DATSOU, di mana

    • D= Data,
    • A= Atribut,
    • T= Stempel Waktu File ,
    • S= Keamanan = NTFS ACL,
    • O= Info pemilik,
    • U= Info audit),

Jika Anda hanya ingin mempertahankan stempel waktu tanggal dan direktori, tetapi tidak ingin subdirektori kosong disalin dan tidak ingin atribut lain dipertahankan, Anda dapat menggunakan:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

di mana /Ssalinan subdirektori tidak kosong

Untuk melihat sintaks lengkap, ketik robocopy /?command prompt, atau lihat posting blog ini: https://ss64.com/nt/robocopy.html dan https://techjourney.net/robocopy-syntax-command-line -switch-dan-contoh /

Contoh perintah yang baru-baru ini saya jalankan:
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

Perhatikan bagaimana mengecualikan 2 subdirektori mengharuskan /XDbendera digunakan dua kali. Juga, pengecualian direktori kedua menggunakan tanda kutip karena ada spasi dalam nama direktori.

Akhirnya, Anda dapat menambahkan /Lbendera untuk menguji perintah sebelum melakukannya secara nyata. Dengan cara ini Anda dapat memverifikasi itu tidak akan menyalin (atau menghapus) direktori / file yang tidak Anda inginkan, dan bahwa tidak ada kesalahan dalam perintah Anda.

Sunting: gotcha ketika menyalin dari Direktori Root (alias drive) ke Folder (direktori non-root)

Setelah menjalankan contoh perintah di atas, direktori tidak terlihat! (Meskipun show hidden filesdan show system filessudah diperiksa di Windows 10!) Perintah berikut sesuai https://serverfault.com/a/455029/399723 memperbaiki ini:

attrib -h -s C:\D_backup

Sebagai alternatif, menambahkan /A-:SH"hapus Atribut Tersembunyi dari file Sistem", dengan demikian dapat mencegah direktori menjadi tersembunyi di tempat pertama, seperti https://serverfault.com/a/565804/399723 . Lihat juga https://ss64.com/nt/robocopy.html . Diskusi
ini memberi lebih banyak cahaya pada opsi ini sebagai solusi.

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

Perangkat Lunak Lainnya:

Atau, Anda dapat mengunduh robocopy versi GUI jika Anda tidak ingin menggunakan baris perintah.

Utilitas windows lainnya adalah XCopy , meskipun sudah termasuk dalam windows 10, ia sudah usang. Lihat tautan untuk mendapatkan gotcha.

Halaman Wikipedia untuk RoboCopy (ditautkan di atas posting ini) mencantumkan perangkat lunak lain yang dapat digunakan.

SherylHohman
sumber
1
Jawaban yang bagus. Seharusnya yang terpilih, karena yang pertama agak ketinggalan jaman. Menggunakan robocopy sejak Windows 7 untuk memangkas directoeies kosong dari cadangan klien, namun, saya rasa itu tersedia sejak Windows XP
DGoiko
@GoGo saya pikir Anda benar. Saya menggunakannya secara luas dengan Windows 7 pasti. Sayangnya, membeli laptop khusus Windows 7 Pro tidak lagi menjadi pilihan. Jadi saya sekarang memiliki Win 10. Saya tidak berpikir saya pernah melihat ketika saya memiliki XP, tetapi sudah ada sejak lama. Tidak begitu terkenal.
SherylHohman
GUI Robocopy sangat baik.
Eddie Kumar
4

Sinkronkan! 3.5 menjaga semua cap waktu (file dan folder, modifikasi dan pembuatan). Ini satu-satunya perangkat lunak yang saya tahu pada Windows XP yang melakukan itu dengan sempurna, di samping Robocopy, dan saya sudah mencoba banyak. Namun berhati-hatilah, ini dapat menghasilkan file yang rusak dengan file sumber yang diunduh menggunakan perangkat lunak seperti FlashGet atau Orbit Downloader (file yang dihasilkan memiliki ukuran yang sama tetapi hanya 25kB yang benar-benar disalin - sisanya diisi dengan angka nol). Saya bertanya kepada pencipta perangkat lunak apakah dia dapat menemukan alasannya, tetapi dia tidak tahu; Saya kira itu ada hubungannya dengan perangkat lunak seperti mengunduh file dalam paket kecil (dimaksudkan untuk mengoptimalkan kecepatan) dan partisi data saya menjadi sangat terfragmentasi.

Robocopy XP026 memang termasuk dalam Windows Vista, tetapi berfungsi pada Windows XP. Cari "Robocopy XP026", atau saya dapat mengirim file di sini karena tidak mudah ditemukan. Atau Anda dapat menginstal Robocopy GUI dan kemudian mencari robocopy.exefile di folder System32, sehingga dapat menggunakannya dari baris perintah. File yang saya miliki adalah 208kB dan nomor versi 5.1.2600.26.

Tampaknya ada bug dengan "mode cadangan", meskipun:

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

Robocopy versi XP027 tampaknya tidak lagi memiliki bug ini tetapi tidak berfungsi pada Windows XP.

Gabriel
sumber
Utilitas pengunduhan file (seperti Bittorrent) mengalokasikan ukuran penuh file pada disk (diisi dengan 0), dan mengunduh bagian dari berbagai sumber, menyimpannya di tempat yang tepat dalam file. File-file ketika dimulai akan memiliki banyak 0000. Entah file itu tidak pernah sepenuhnya diunduh atau Sinkronkan! melihat terlalu banyak 0000 dan menyerahkan salinannya.
Chloe
Terima kasih! Saya menggunakan Synchronize It! Begitu cepat juga! SyncToy dan Unison mengacaukan waktu modifikasi file. Unison merusak symlink Cygwin. SyncToy bahkan menyalin 'My Music' yang ternyata berada di persimpangan di tujuan, tetapi ketika saya menyegarkan, itu tetap ingin menyalin lagi, meskipun semuanya sama!
Chloe
3

RoboCopy harus dapat melakukannya dengan sakelar COPYALL. Anda dapat mengambil versi GUI dari Microsoft Technet .

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

Saya tidak yakin saklar mana yang mempertahankan tanggal file tetapi ini berfungsi. Lalu saya zip direktori C: \ temp \ Pics yang juga memelihara tanggal file seperti yang disebutkan sebelumnya.

daier
sumber
1
Bagaimana zipping sesuai dengan diskusi ini?
Scott
Ini cocok dengan juga menjaga stempel waktu untuk file [zip], sesuatu yang tampaknya memenuhi orang yang mengajukan pertanyaan. Sama-sama, Scott. Ini terjadi untuk membuat jawaban yang bermanfaat, jika bukan jawaban yang benar.
amn
Ini mempertahankan tanggal / waktu file, tetapi tidak melakukannya untuk folder.
barneco
1

Cara paling sederhana bagi saya, sejauh ini, adalah metode "kirim ke". Tidak perlu aplikasi eksternal. Dalam pengalaman saya, itu mempertahankan semua atribut file asli.

Metode yang saya gunakan sebelumnya, adalah metode kompresi / folder zip. Meskipun ini tentu memakan waktu lebih lama karena file tidak hanya disalin, tetapi diproses dan dikompresi, baik saat mengompresi dan dekompresi.

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

Tambahkan pintasan ke folder tempat Anda ingin disalin, dan item itu akan muncul di sendtomenu Anda ketika Anda mengklik kanan file yang ingin Anda salin.

tspmtel
sumber
Terima kasih telah berbagi trik menggunakan "Klik kanan> Kirim ke". Ini berfungsi, kecuali untuk tanggal pembuatan. Sebelumnya, saya menggunakan perintah xcopy asli: xcopy Source Destination /kes. ( kBendera memungkinkan untuk mempertahankan cap waktu modifikasi, tetapi tanggal pembuatan tidak dipertahankan). Metode kompresi untuk zip (atau rar) adalah metode yang baik, tetapi seringkali terlalu lama.
OuzoPower
0

Sangat mudah untuk memindahkan folder dan direktori dan tetap mempertahankan Tanggal Pembuatan. Cukup tahan Shiftdan seret folder ke lokasi baru (perintah pindah). Tanggal Dimodifikasi akan menjadi tanggal sekarang tetapi Tanggal Dibuat akan mempertahankan tanggal asli.

Davidus428
sumber
2
JANGAN LAKUKAN INI! Ini menghapus file dari folder asli. Baru saja kehilangan data yang tidak dapat dipulihkan dari ponsel saya dengan mencoba melakukan ini (tidak ada CTRL + Z tidak berfungsi).
BadAtPHP
0

xcopy berfungsi dengan baik untuk ini. Cukup tentukan flag / k untuk menyalin atribut.

Sumber
xcopy Sintaks [Tujuan] [Parameter opsional]

Perintah xcopy dapat menyalin satu atau lebih file atau pohon direktori dari satu lokasi ke lokasi lain. Perintah xcopy termasuk dalam semua versi Windows dari Windows 95 ke Windows 8.

Chris
sumber
1
Saya hanya mencoba /Kparameter dan tidak mempertahankan tanggal pembuatan.
CoDEmanX
Sepertinya saya seperti bekerja kadang-kadang dan kadang-kadang tidak - windows yang terbaik;)
SebastianH
0

Saya mencapai ini dengan

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

(ini benar-benar digunakan sebagai alat sinkronisasi dari satu direktori ke mirror lain dan pilihan timewindow adalah untuk mencegah masalah ketika sistem windows memindahkan jam 1 jam untuk penghematan siang hari dll. dibandingkan dengan sistem linux)

di lingkungan cygwin di dalam windows atau mesin virtual linux di dalam windows dengan drive windows terpasang (misalnya dengan virtualbox)

NB cygwin dan virtualbox keduanya gratis dan memungkinkan Anda untuk memiliki tingkat fungsi linux yang lebih rendah atau lebih besar pada windows - mereka berdua memerlukan sedikit pengaturan - terutama virtualbox, tetapi memiliki banyak manfaat ....

Masalah saya sendiri adalah file memiliki waktu yang tepat tetapi direktori tidak. rsync telah mengurutkan tanggal pada direktori serta tanggal pada file.

tom
sumber
0

Perintah ini menyalin stempel waktu yang sama untuk file. Catatan itu tidak melakukan stamping waktu yang persis sama untuk folder itu sendiri. Juga perhatikan bahwa saya menempatkan tanda kutip di sekitar sumber (Temp1) dan tujuan (Temp2). Ini dilakukan jika ada ruang di jalur. Saya tidak punya spasi tapi saya pikir saya harus memasukkannya untuk skenario terburuk.

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

Untuk menjaga cap waktu yang sama untuk folder juga:

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

pablo
sumber