Làm cách nào để giữ nguyên các thuộc tính tệp khi một bản sao tệp trong Windows?


41

Trên Linux, chúng ta chỉ cần làm:

cp -pr directory

Làm thế nào để làm điều đó trong Windows? Nó có thể được thực hiện trong Windows Explorer không? Bất kỳ đề xuất công cụ GUI?

Sẽ là tốt nhất nếu tôi có thể giữ quyền NTFS và thời gian tạo / sửa đổi / truy cập. Tối thiểu, tôi cần giữ nguyên ngày sửa đổi cho các tập tin thư mục. Bản sao Windows Explorer không lưu giữ ngày sửa đổi cho các thư mục.



1
Tôi không nghĩ đó là một bản sao. Thời gian tạo tệp chỉ là một trong các thuộc tính tệp.
netvope

Các câu trả lời trong câu hỏi đó cung cấp phần mềm sẽ bảo toàn tất cả các dấu thời gian, mtime, ctime và atime.
John T

Điều này có thể được quan tâm: support.microsoft.com/kb/310316 . Thật không may, một số khóa đăng ký này không còn hoạt động trong Vista trở lên.
Amro

robocopy c:\folderA c:\folderB /mir /itlà tất cả những gì bạn cần. Lưu ý rằng điều này sẽ xóa hoàn toàn c: \ thư mụcB và tạo một thư mục c: \ thư mục mới phản chiếu c: \ thư mụcA.
Pacerier

Câu trả lời:


6

Không có cách nào đơn giản để làm điều này trong Windows. Có một số chương trình tuyên bố có thể lưu giữ ngày tạo của tệp.
Dưới đây là một vài chương trình có thể thực hiện thủ thuật http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html   (Liên kết bị hỏng; không có trong Wayback Machine).

Chỉ sử dụng Windows Explorer là không thể. Nếu bạn xem tài liệu về CopyFile, chức năng CopyFile (winbase.h) , bạn sẽ thấy rằng nó tránh được chủ đề. Nhưng  chức năng CopyFile (Windows Developer Preview) (kho lưu trữ năm 2012 của cùng một URL) cho biết:

Thời gian tập tin ngữ nghĩa

Bài viết này nên ghi lại ngữ nghĩa liên quan đến thời gian tạo / sửa đổi / truy cập tệp.

Thời gian tạo: nếu tệp mục tiêu đã tồn tại, thời gian tạo của nó được giữ nguyên , nếu không thì nó được đặt thành thời gian hệ thống hiện tại.
Thời gian sửa đổi lần cuối: luôn được sao chép từ thời gian sửa đổi của tệp nguồn.
Thời gian truy cập lần cuối: luôn được đặt thành thời gian hệ thống hiện tại.


Liên kết bị hỏng.
Smile4ever

21

RoboCopy có thể duy trì mtime cho các thư mục bằng công tắc / DCOPY: T, nhưng điều này chỉ hoạt động trong Vista và mới hơn. Nó cũng có thể bảo tồn ACL. Ngoài ra, FastCopy có thể được cấu hình để bảo vệ mtimes thư mục, ACL và ADSes .


Trong Windows robocopy là cách được khuyến nghị để làm điều này vì nó không chỉ sao chép các thuộc tính tệp / thư mục mà còn cho phép xử lý toàn vẹn tệp và xử lý lỗi trong toàn bộ quá trình sao chép.
megamorf

@megamorf: Làm thế nào để robocopy làm gì đặc biệt? Nó không thực hiện bất kỳ kiểm tra hoặc băm dữ liệu nào, nó dựa vào HĐH để báo cáo lỗi giống như hầu hết các chương trình khác.
afrazier

Tôi đồng ý rằng cho đến nay robocopy không có tính năng so sánh tổng kiểm tra trước bài. Nhưng nói chung, robocopy sẽ truyền lại toàn bộ tệp khi xảy ra lỗi. Nếu bạn muốn nó tiếp tục ghi phần còn lại của tệp vào đích sau khi xảy ra lỗi mà không truyền lại toàn bộ tệp, bạn chỉ định công tắc / Z.
megamorf

@afrazier, Tại sao không sử dụng /mir?
Pacerier

2
@Pacerier, vì câu hỏi không phải là về việc phản chiếu cây, mà là về việc sao chép các tệp và thư mục và bảo tồn càng nhiều siêu dữ liệu càng tốt. Không chỉ /mirxóa dữ liệu khỏi thư mục đích, bạn vẫn cần /dcopy:tduy trì mtimes thư mục và /copyallđể lưu giữ nhiều hơn chỉ là dấu thời gian của tệp.
afrazier

19

... hoặc bạn chỉ có thể tạo một kho lưu trữ zip (với phương thức nén được đặt thành "Lưu trữ"), sau đó giải nén các tệp mà bạn muốn sao chép chúng. Các thuộc tính ngày / giờ giống như các tệp gốc.


Ý tưởng tuyệt vời. Nhưng liệu bản sao này trên "những thứ khác" như thuộc tính tệp và vv?
Pacerier

2
Điều này không phải lúc nào cũng hoạt động. Ví dụ, với 7-zip, sử dụng nén 7zip không bảo toàn một trong những lần tập tin (tôi quên mất). Nó không bảo toàn bất kỳ thời gian thư mục nào (như tôi nhớ), với ZIP, bạn có thể duy trì cả thời gian được tạo và sửa đổi, nhưng 7zip chỉ giữ một số lần tùy thuộc vào cách bạn giải nén: cho dù bạn kéo và thả hoặc trích xuất từ ​​menu chương trình . Kiểm tra tốt, châu chấu trẻ.
Jon

3
Cảm ơn bạn rất nhiều, điều này làm việc tốt cho tôi. Tôi đã sử dụng 7zip, với định dạng ZIP (ngày tạo không được bảo toàn ở định dạng 7Z).
Thu hút

Bạn có thể thêm lệnh cụ thể bạn sẽ sử dụng để làm điều này? Một ví dụ về lệnh cụ thể để sử dụng phương pháp nén mà bạn đề xuất? Điều này sẽ làm cho nó trở thành một câu trả lời hoàn chỉnh hơn, trái ngược với nhiều gợi ý hoặc nhận xét hơn. Nó cũng sẽ cứu vô số người khỏi phải thực hiện tìm kiếm để tìm ra cách thực hiện đề xuất của bạn. Ngoài ra, như một phần thưởng, một liên kết đến tài liệu hoặc một bài viết có thêm thông tin về phương pháp này sẽ rất tuyệt vời. Cung cấp tất cả thông tin giúp mọi người khác khỏi việc phát minh lại bánh xe (tìm kiếm) và có thể tăng đáng kể upvote. Chúng tôi cảm ơn bạn!
SherylHohman

6

Công cụ dòng lệnh Robocopy (đi kèm với hầu hết các phiên bản windows)
Trên máy Windows 10 của tôi, nó được đặt tạiC:\Windows\System32

Từ Wikipedia , nó có thể được sử dụng với bộ tùy chọn sau để bảo toàn dấu thời gian của tệp thư mục, cũng như các thuộc tính khác:

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

  • /DCOPY:Tgiữ nguyên Dấu thời gian của Thư mục gốc (yêu cầu phiên bản XP026 trở lên)
  • /E: Sao chép thư mục đệ quy, bao gồm cả Thư mục trống
  • /R:0: không thử lại các tệp bị khóa (số lần thử lại trên các bản sao không thành công giá trị mặc định là 1 triệu),

  • /COPYALL: Sao chép tất cả thông tin tệp,
    (tương đương với /COPY:DATSOU, ở đâu

    • D= Dữ liệu,
    • A= Thuộc tính,
    • T= Dấu thời gian tệp ,
    • S= Bảo ​​mật = ACL NTFS,
    • O= Thông tin chủ sở hữu,
    • U= Thông tin kiểm toán),

Nếu bạn chỉ muốn duy trì dấu thời gian của ngày và thư mục, nhưng không muốn các thư mục con trống được sao chép và không muốn các thuộc tính khác được bảo tồn thì bạn có thể sử dụng:
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S

nơi /Ssao chép các thư mục con không trống

Để xem cú pháp đầy đủ, hãy nhập robocopy /?vào dấu nhắc lệnh hoặc xem qua các bài đăng trên blog này: https://ss64.com/nt/robocopy.htmlhttps://techjTHER.net/robocopy-syntax-command-line -chuyển đổi và ví dụ /

Một ví dụ về lệnh tôi mới chạy:
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

Lưu ý cách loại trừ 2 thư mục con yêu cầu /XDcờ được sử dụng hai lần. Ngoài ra, loại trừ thư mục thứ hai sử dụng dấu ngoặc kép vì có khoảng trắng trong tên thư mục.

Cuối cùng, bạn có thể thêm /Lcờ để kiểm tra lệnh trước khi thực hiện. Bằng cách này, bạn có thể xác minh rằng nó sẽ không sao chép (hoặc xóa) bất kỳ thư mục / tệp nào bạn không muốn và không có lỗi trong lệnh của bạn.

Chỉnh sửa: gotcha khi sao chép từ Thư mục gốc (còn gọi là ổ đĩa) sang Thư mục (thư mục không gốc)

Sau khi chạy lệnh ví dụ ở trên, thư mục không hiển thị! (Mặc dù show hidden filesshow system filesđã được kiểm tra trong Windows 10!) Lệnh sau theo https://serverfault.com/a/455029/399723 đã sửa lỗi này:

attrib -h -s C:\D_backup

Ngoài ra, việc thêm /A-:SH"bỏ đặt thuộc tính ẩn khỏi tệp hệ thống", do đó có thể ngăn thư mục bị ẩn ở vị trí đầu tiên, theo https://serverfault.com/a/565804/399723 . Xem thêm https://ss64.com/nt/robocopy.html .
Đây descussion làm sáng tỏ thêm về tùy chọn này như một giải pháp.

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

Phần mềm khác:

Ngoài ra, bạn có thể tải xuống phiên bản GUI của robocopy nếu bạn không muốn sử dụng dòng lệnh.

Một tiện ích windows khác là XCopy , mặc dù nó được bao gồm trong windows 10, nhưng nó không được dùng nữa. Xem các liên kết cho gotchas.

Trang Wikipedia cho RoboCopy (được liên kết ở đầu bài này) liệt kê các phần mềm khác có thể được sử dụng.


1
Câu trả lời tốt. Nên là người được chọn, vì người đầu tiên đã lỗi thời. Đã sử dụng bản sao lưu từ Windows 7 để cắt các phần trống trực tiếp từ bản sao lưu của máy khách, tuy nhiên, tôi nghĩ rằng nó đã có sẵn kể từ Windows XP
DGoiko

@DGoiko Tôi nghĩ bạn đúng. Tôi chắc chắn đã sử dụng nó với Windows 7. Thật không may, mua máy tính xách tay Windows 7 Pro đặc biệt không còn là một lựa chọn. Vì vậy, bây giờ tôi có Win 10. Tôi không nghĩ rằng tôi đã từng nhìn khi tôi có XP, nhưng nó đã xuất hiện từ lâu. Chỉ là không quá nổi tiếng.
SherylHohman

GUI Robocopy là tuyệt vời.
Eddie Kumar

4

Đồng bộ hóa nó! 3.5 giữ tất cả các dấu thời gian (tệp và thư mục, sửa đổi và tạo). Đây là phần mềm duy nhất tôi biết trên Windows XP, hoạt động hoàn hảo, bên cạnh Robocopy và tôi đã thử rất nhiều. Mặc dù vậy, hãy cẩn thận, nó có thể tạo ra các tệp bị hỏng với các tệp nguồn được tải xuống bằng phần mềm như FlashGet hoặc Orbit Downloader (các tệp kết quả có cùng kích thước nhưng chỉ có 25kB được sao chép thực sự - phần còn lại chứa đầy số không). Tôi đã hỏi người tạo ra phần mềm nếu anh ta có thể tìm ra lý do tại sao, nhưng anh ta không có manh mối; Tôi đoán nó phải làm với phần mềm tải xuống các tệp như vậy trong các gói nhỏ (nhằm tối ưu hóa tốc độ) và phân vùng dữ liệu của tôi bị phân mảnh rất nhiều.

Robocopy XP026 thực sự có trong Windows Vista, nhưng hoạt động trên Windows XP. Tìm kiếm "Robocopy XP026" hoặc tôi có thể gửi tệp ở đây vì nó không dễ tìm. Hoặc bạn có thể cài đặt Robocopy GUI và sau đó tìm kiếm robocopy.exetệp trong thư mục System32, để sử dụng nó từ dòng lệnh. Tệp tôi có là 208kB và số phiên bản là 5.1.2600.26.

Dường như có một lỗi với "chế độ sao lưu":

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

Phiên bản Robocopy XP027 dường như không còn lỗi này nhưng nó không hoạt động trên Windows XP.


Các tiện ích tải xuống tệp (như Bittorrent) phân bổ kích thước đầy đủ của tệp trên đĩa (chứa 0) và tải xuống các phần từ nhiều nguồn, lưu trữ chúng ở đúng vị trí trong tệp. Các tệp khi được khởi động sẽ có nhiều 0000. Hoặc tệp không bao giờ được tải xuống hoàn toàn hoặc Đồng bộ hóa! thấy quá nhiều 0000 và từ bỏ bản sao.
Chloe

Cảm ơn! Tôi đã sử dụng đồng bộ hóa nó! Nó cũng nhanh quá! SyncToy và Unison đã làm xáo trộn thời gian sửa đổi tệp. Unison đã làm hỏng các liên kết Cygwin. SyncToy thậm chí còn sao chép 'Âm nhạc của tôi', hóa ra là ở một ngã ba về đích, nhưng khi tôi làm mới, nó cứ muốn sao chép lại, mặc dù mọi thứ đều giống nhau!
Chloe



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

Tôi không chắc chắn công tắc nào duy trì ngày tập tin nhưng điều này hoạt động. Sau đó, tôi nén thư mục C: \ temp \ Pics cũng duy trì ngày tệp như đã đề cập trước đó.


1
Làm thế nào để nén bản sao phù hợp với cuộc thảo luận này?
Scott

Nó phù hợp bằng cách duy trì dấu thời gian cho các tệp [đã nén], thứ gì đó dường như chiếm giữ người hỏi câu hỏi. Không có gì đâu, Scott. Điều này xảy ra để làm cho một câu trả lời hữu ích, nếu không phải là câu trả lời đúng.
20/8/2015

Điều này không bảo toàn ngày / giờ của tệp, nhưng không làm như vậy đối với thư mục.
barneco

1

Cách đơn giản nhất đối với tôi, cho đến nay, là phương thức "gửi đến". Nó không cần bất kỳ ứng dụng bên ngoài. Theo kinh nghiệm của tôi, nó giữ lại tất cả các thuộc tính tệp gốc.

Phương pháp tôi đã sử dụng trước đây, là phương pháp thư mục nén / zip. Mặc dù điều này chắc chắn sẽ mất nhiều thời gian hơn vì các tệp không chỉ được sao chép mà còn được xử lý và nén, cả khi nén và giải nén.

%appdata%\Microsoft\Windows\SendTo
hoặc là. C:\Users\_______\AppData\Roaming\Microsoft\Windows\SendTo

Thêm một lối tắt vào thư mục mà bạn muốn sao chép chúng và mục này sẽ xuất hiện trong sendtomenu của bạn khi bạn nhấp chuột phải vào một tệp bạn muốn sao chép.


Cảm ơn bạn đã chia sẻ thủ thuật sử dụng "Nhấp chuột phải> Gửi đến". Nó hoạt động, ngoại trừ ngày tạo. Trước đây, tôi đã sử dụng lệnh xcopy riêng : xcopy Source Destination /kes. ( kCờ cho phép duy trì dấu thời gian sửa đổi, nhưng ngày tạo không được giữ nguyên). Phương pháp nén thành zip (hoặc rar) là một phương pháp tốt, nhưng thường mất quá nhiều thời gian.
OuzoPower

0

Thật đơn giản để di chuyển các thư mục và thư mục và vẫn giữ Ngày tạo. Chỉ cần giữ Shiftvà kéo thư mục đến vị trí mới (lệnh di chuyển). Ngày Sửa đổi sẽ là ngày hiện tại nhưng Ngày tạo sẽ giữ lại ngày ban đầu.


2
ĐỪNG LÀM NÀY! Điều này xóa các tập tin từ thư mục gốc. Chỉ mất dữ liệu không thể phục hồi từ điện thoại của tôi bằng cách thử làm điều này (không có CTRL + Z không hoạt động).
BadAtPHP


0

xcopy hoạt động tốt cho việc này. Chỉ cần chỉ định cờ / k để sao chép các thuộc tính.

Cú pháp
xcopy Source [Destination] [Tham số tùy chọn]

Lệnh xcopy có thể sao chép một hoặc nhiều tệp hoặc cây thư mục từ vị trí này sang vị trí khác. Lệnh xcopy được bao gồm trong tất cả các phiên bản Windows từ Windows 95 đến Windows 8.


1
Tôi chỉ thử /Ktham số và nó không giữ được ngày tạo.
CoDEmanX

Dường như với tôi vì nó hoạt động đôi khi và đôi khi không - cửa sổ hoạt động tốt nhất;)
SebastianH

0

Tôi đạt được điều này với

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

(cái này thực sự được sử dụng như một công cụ đồng bộ hóa từ thư mục này sang máy nhân bản khác và tùy chọn thời gian là để ngăn chặn sự cố khi hệ thống windows di chuyển đồng hồ 1 giờ để tiết kiệm ánh sáng ban ngày, v.v. so với hệ thống linux)

trong môi trường cygwin bên trong windows hoặc máy ảo linux bên trong windows có gắn ổ đĩa windows (ví dụ với virtualbox)

NB cygwin và virtualbox đều miễn phí và cho phép bạn có chức năng linux ở mức độ thấp hơn hoặc lớn hơn trên windows - cả hai đều yêu cầu một chút thiết lập - đặc biệt là hộp ảo, nhưng có nhiều trang phục ....

Vấn đề của riêng tôi là các tập tin có thời gian chính xác nhưng các thư mục thì không. rsync đã sắp xếp ngày tháng trên các thư mục cũng như ngày trên các tập tin.


0

Lệnh này sao chép cùng một dấu thời gian cho các tập tin. Lưu ý rằng nó không thực hiện chính xác đồng thời dập cho các thư mục. Cũng lưu ý rằng tôi đã đặt dấu ngoặc kép quanh cả nguồn (Temp1) và đích (Temp2). Điều này được thực hiện trong trường hợp có không gian trong các đường dẫn. Tôi không có bất kỳ khoảng trống nào nhưng tôi nghĩ tôi nên đưa nó vào các tình huống xấu nhất.

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

Để giữ dấu thời gian giống nhau cho các thư mục:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.