Dấu thời gian có thể được giữ nguyên khi sao chép tệp trên OS X không?


14

Tôi quan tâm đến việc kết hợp các tệp từ ba máy Mac bằng cách sao chép các tệp từ mỗi máy vào một hệ thống phân cấp thư mục duy nhất của thiết kế của tôi trên ổ cứng ngoài.

Theo kinh nghiệm trước đây của tôi, sao chép các tệp trong OSX, đôi khi các tệp bị mất dấu thời gian được tạo và sửa đổi; tức là chúng được thay đổi đến thời điểm hiện tại khi xảy ra sao chép tập tin.

Làm thế nào tôi có thể chắc chắn rằng điều này không xảy ra?


Khi nào bạn mất dấu thời gian?
lhf

Sao chép chúng thế nào?
Gerry

Câu trả lời:


11

Tôi chỉ chạy qua cái này và cplệnh tích hợp thực sự xử lý nó.

Tôi phát hiện ra một loạt các thẻ CF cũ mà tôi muốn thu hoạch từ đó. Các tập lệnh xử lý của tôi sẽ xem xét tập tin mtime để đặt nó vào đúng vị trí để tôi cần nó được bảo tồn.

Từ trang người đàn ông :

 -p    Cause cp to preserve the following attributes of each source file in the copy: modification time,
       access time, file flags, file mode, user ID, and group ID, as allowed by permissions.  Access
       Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be pre-
       served.

       If the user ID and group ID cannot be preserved, no error message is displayed and the exit value
       is not altered.

       If the source file has its set-user-ID bit on and the user ID cannot be preserved, the set-user-
       ID bit is not preserved in the copy's permissions.  If the source file has its set-group-ID bit
       on and the group ID cannot be preserved, the set-group-ID bit is not preserved in the copy's per-
       missions.  If the source file has both its set-user-ID and set-group-ID bits on, and either the
       user ID or group ID cannot be preserved, neither the set-user-ID nor set-group-ID bits are pre-
       served in the copy's permissions.

Vì vậy, bằng cách sử dụng zshtôi đã có thể chạy ( NO NAMElà tên khối lượng thẻ của tôi):

cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics

Tôi tin rằng /**/*cấu trúc đặc biệt dành riêng cho ZSH; tuy nhiên bạn có thể làm một cái gì đó như

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path

+1 Đơn giản cp -plà đơn giản , duy trì thời gian đã sửa đổi (có thể là hữu ích nhất trong ba dấu thời gian trên một tệp) và không yêu cầu tạo tệp lưu trữ trung gian.
dâu

1
Theo như tôi biết, "cp -p" quên ngày tạo và thay vào đó đặt ngày thành ngày sửa đổi. Đó là một hành vi khá vô lý.
Nicolas Barbulesco

1
cp -pkhông hoạt động khi sao chép từ HFS + sang FAT32.
NobleUplift

9

Tôi sử dụng rsync để thực hiện loại bản sao này. Tuy nhiên, lưu ý rằng phiên bản do Apple cung cấp là 2.6.9 và có lỗi về điều này. Vì vậy, bạn cần phải xây dựng một bên thứ ba hoặc tự xây dựng hoặc thông qua trình quản lý gói

ví dụ

rsync -aE source_dir target_dir

Tùy chọn -Esao chép ACL và -aduy trì các quyền và thời gian unix. (cũng như trên rsync 2 rsync 3 dường như cần -AX)

rsync cũng có thể được thiết lập để sao chép vào các máy từ xa mà không cần gắn ổ đĩa.

Có một số giao diện người dùng GUI cho rsync, ví dụ aRsync . Đối với các công cụ đồng bộ hóa thư mục khác xem câu hỏi này .


rsynclà một giải pháp tốt, nhưng lưu ý rằng nó không bảo toàn thời gian truy cập. pax(xem câu trả lời của tôi dưới đây).
jaume

1
Theo như tôi biết, "rsync" quên ngày tạo và thay vào đó đặt ngày thành modif. Đó là một thất bại lớn.
Nicolas Barbulesco

→ jaume: bất kỳ lệnh nào tạo bất kỳ dạng sao chép "tệp a" nào về "tệp b" đều phải đọc "tệp a" trước. Do đó thời gian truy cập của "tập tin a" nên được sửa đổi. Đây không phải là một tính năng ở cấp lệnh mà ở cấp hạt nhân. Nếu một lệnh, thông qua một cuộc gọi hệ thống khác, khôi phục thời gian truy cập về trạng thái trước đó, thì đây là một mẹo nguy hiểm, bởi vì đó là một lời nói dối đơn giản .
dan

→ Nicolas: man rsyncvà tìm kiếm preserve times:) câu trả lời từ Mark là chính xác.
dan

1
→ Mark, @daniel - Tôi vừa thử nghiệm rsync trong Mac OS X 10.6.8. Một bản sao cục bộ của một thư mục có "rsync -rt" quên ngày tạo tệp và thay thế nó bằng ngày sửa đổi của chúng. Mặc dù hướng dẫn sử dụng cho "rsync" nói "bảo toàn thời gian" cho tùy chọn -t. Lỗi này có lẽ cũng có ở Mavericks và Yosemite.
Nicolas Barbulesco

4

Sử dụng pax. paxĐịnh dạng mặc định, được gọi là ustar , duy trì sửa đổi tệp và thời gian truy cập (trong số những thứ khác như ID người dùng, ID nhóm, bit chế độ tệp và các thuộc tính mở rộng như nhận xét Spotlight và ACL). Xem paxtrang người đàn ông ở đây để biết thêm chi tiết.

Đầu tiên, tạo một paxkho lưu trữ trên mọi máy Mac và sao chép nó vào ổ cứng ngoài như thế này:

  1. Mở Ứng dụng> Tiện ích> Thiết bị đầu cuối.
  2. Nhập vào Terminal:

    $ cd
    

    và kéo thư mục chứa các tệp được kết hợp nằm trên máy Mac đó đến Terminal:

    nhập mô tả hình ảnh ở đây

    Ngoài ra, bạn có thể nhập tên thư mục đầy đủ:

    $ cd /path/to/your\ folder
    

    Điều này sẽ thay đổi thư mục hiện tại thành 'thư mục của bạn'.

  3. Lưu trữ thư mục với pax:

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Sử dụng Finder để sao chép kho lưu trữ mới tạo yourfolder.ustarvào ổ cứng ngoài.

Sau đó trích xuất tài liệu lưu trữ với pax:

  1. Mở Terminal trên máy Mac có ổ cứng USB gắn ngoài.

  2. Thay đổi thư mục hiện tại thành phân cấp thư mục đơn trên ổ cứng ngoài với lệnh cdnhư được giải thích ở trên:

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. Trích xuất tài liệu lưu trữ:

    $ pax -r -p e < yourfolder.ustar
    $ pax -r -p e < yourfolder2.ustar
    $ pax -r -p e < yourfolder3.ustar
    $ ls
    your folder
    your folder 2
    your folder 3
    
  4. Di chuyển các tệp xung quanh với Finder nếu bạn cần (Finder giữ nguyên thời gian sửa đổi và truy cập tệp trong cùng một ổ đĩa).

(Tôi đã thử quy trình này trên OS X 10.8 (Mountain Lion).)


1
Không hoạt động đối với tên tệp dài hơn 200 ký tự cộng
đồng.hpe.com / t5 / Ignite

0

Nén chúng bằng zip hoặc chọn chúng bằng cách nhấp ctrl hoặc nhấp chuột phải và chọn Nén. Sao chép các tệp nén vào hệ thống đích của bạn và mở chúng ở đó.

Nếu bạn có thể, định dạng ổ đĩa ngoài của bạn dưới dạng hệ thống tệp Mac OS, không phải là FAT.


Không phải bấm tùy chọn. Ctrl-click. Hoặc nhấp chuột phải.
Nicolas Barbulesco

1
Sự lựa chọn tốt nhất để định dạng đĩa là Mac OS Extended Journalled. Mac OS Extended còn được gọi là HFS +.
Nicolas Barbulesco
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.