Làm cách nào để sao chép một tập tin trong unix mà không thay đổi thời gian sửa đổi lần cuối của nó?


89

Nếu tôi sao chép một số tệp từ nơi này sang nơi khác bằng cách sử dụng cp, dấu thời gian trên tệp đã sao chép được đặt thành thời gian của bản sao.

Có cách nào để tránh điều này?

Tôi cần sao chép các tập tin mà không thay đổi dấu thời gian của chúng.

Câu trả lời:


103

cp -pkhông lừa Đối với Linux :

-p giống như --preserve=mode,ownership,timestamps

Đối với FreeBSD :

-p Nguyên nhân cp bảo toàn các thuộc tính sau của mỗi tệp nguồn trong bản sao: thời gian sửa đổi, thời gian truy cập, cờ tệp, chế độ tệp, ACL, ID người dùng và ID nhóm, khi được phép.

đối với OS X :

-pNguyên nhân cp bảo toàn các thuộc tính sau của mỗi tệp nguồn trong bản sao: thời gian sửa đổi, thời gian truy cập, cờ tệp, chế độ tệp, ID người dùng và ID nhóm, theo sự cho phép của quyền. Danh sách điều khiển truy cập (ACL) và Thuộc tính mở rộng (EA), bao gồm các nhánh tài nguyên, cũng sẽ được giữ nguyên.


25
cp -a cũng rất hay để biết, nó không chỉ ngụ ý -p mà còn -R để sao chép toàn bộ thư mục và -d để giữ liên kết.
thường dân

2
Lưu ý rằng khi sử dụng GNU Coreutils cp -pkhông chỉ giữ nguyên dấu thời gian mà còn cả chế độ và quyền sở hữu và trên FreeBSD bên cạnh thời gian sửa đổi, nó còn bảo vệ »thời gian truy cập, cờ tệp, chế độ tệp, ACL, ID người dùng và ID nhóm, như được phép bằng quyền. «và trên OS X bổ sung» Thuộc tính mở rộng, bao gồm các nhánh tài nguyên «.
Stefan Schmidt

trên OSX mới nhất, cp -p vẫn chạm vào dấu thời gian của tệp nguồn
afathman

15

Khi sử dụng cptừ GNU Coreutils , để chỉ lưu giữ dấu thời gian và không thuộc tính như id người dùng, id nhóm hoặc chế độ tệp, có --preservethể sử dụng một cách rõ ràng danh sách các thuộc tính sẽ được bảo tồn.

cp --preserve=timestamps source destination

Xin lưu ý rằng cú pháp này có thể không được hỗ trợ trên các Thông báo khác. Một cách khác có thể là sử dụng --timestham số rsynccần có trên hầu hết các cài đặt.


4
Đây là câu trả lời đúng. Sử dụng -pkhông phải là câu trả lời chính xác. -pgiữ quyền sở hữu và chế độ là tốt. Mà có thể không muốn .. và không được hỏi trong câu hỏi.
bshea

10

Có ba lần trên một hệ thống tệp Unix, thời gian truy cập (atime), thời gian sửa đổi (mtime) và thời gian thay đổi inode (ctime). Bạn có thể thay đổi thời gian truy cập và thời gian sửa đổi bằng chương trình cảm ứng, ví dụ

bản sao cp
chạm -r bản sao

Tuy nhiên, bạn không thể thay đổi thời gian thay đổi inode.


1
để biết thời gian thay đổi inode, xem thêm linux - Cài đặt tạo hoặc thay đổi dấu thời gian - Stack Overflow
sdaau

0

Gần đây tôi cần phải làm một cái gì đó tương tự nhưng thay vào đó sử dụng symlink. Để tạo liên kết tượng trưng và giữ dấu thời gian gốc:cp -ps src_file dst_symlink


Như một bình luận, điều này có thể hữu ích cho một số độc giả, như một câu trả lời, nó gây thêm tiếng ồn cho hầu hết các độc giả.
ndemou
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.