2015-10-07 21 views
8

Có cách nào để tạo tệp .tar bỏ qua các giá trị của atime/ctime/mtime cho các tệp/thư mục của nó không?Làm cách nào để tạo tệp tar bỏ qua dấu thời gian cho nội dung của nó?

Tại sao chúng tôi muốn thực hiện việc này?

Chúng tôi có một bước trong quá trình xây dựng của chúng tôi tạo ra một thư mục các hiện vật được đóng gói thành một con tarfile. Chúng tôi hy vọng rằng bước xây dựng là không cần thiết - với cùng một yếu tố đầu vào, nó tạo ra chính xác cùng một tệp/đầu ra mỗi lần.

Lý tưởng nhất, chúng tôi cũng muốn bước là bitwise không đáng kể trong các bản dựng sạch, để chúng tôi có thể sử dụng các bản dựng liên tiếp để kiểm tra xem không có gì thay đổi. Nhưng vì các tệp tar bao gồm dấu thời gian (atime/ctime/mtime) cho mỗi mục nhập, các tệp tar được tạo bởi bước xây dựng đó không bao giờ giống hệt với lần chạy trước đó, mặc dù nội dung của mỗi tệp bên trong tệp nén giống hệt nhau.

Có cách nào để tạo ra một tarfile bỏ qua dấu thời gian của các mục nhập của nó, sao cho bước tạo lưu trữ có thể là bitwise idempotent? (Chúng tôi muốn tận dụng siêu dữ liệu tệp khác mà tar bảo tồn, chẳng hạn như bit chế độ tệp và liên kết tượng trưng.)

+0

bạn đã bao giờ tìm thấy câu trả lời hoàn chỉnh cho điều này chưa? Tôi cũng muốn làm điều tương tự, được hỏi trong một câu hỏi ở đây: https://stackoverflow.com/questions/45734702/tar-preserving-only-file-names-contents-and-executable-bit?noredirect=1#comment78427625_45734702 Tôi cũng muốn đảm bảo rằng người dùng, nhóm và quyền không được lưu trữ. Có điều gì khác cần lưu ý không? –

+0

@TomEllis, tôi sẽ xem xét việc xây dựng một cái gì đó tùy chỉnh với mô-đun «tarfile' Python nếu bạn muốn kiểm soát chính xác các quyền đó và không được lưu trữ. –

Trả lời

8

GNU tar có một cuộc tranh luận --mtime, có thể được sử dụng để lưu trữ một ngày cố định trong kho lưu trữ hơn thời gian thực của tệp:

tar --mtime='1970-01-01' input ... 

Khi nén tarball bằng gzip, bạn cũng cần chỉ định -n để ngăn tên và dấu thời gian của kho lưu trữ tar được lưu trữ:

tar --mtime='1970-01-01' input ... | gzip -n >input.tar.gz 
+0

Làm thế nào điều này có thể được thực hiện trong macOS? Tôi không thể tìm thấy '--mtime' – mljrg

+3

@mljrg: tar chuẩn trên macOS dựa trên bsd và tar BSD khác với tar tar. Để cài đặt GNU tar, nếu bạn sử dụng homebrew, bạn có thể 'brew install gnu-tar' làm cho tar của GNU có sẵn dưới dạng' gtar'. – Mickalot

+0

@Mickalot Cảm ơn! – mljrg

-2

Chúng tôi có thể tạo tệp tar mà không có dấu thời gian phụ thêm vào nó.

1) Tạo tập tin tar mà không nén và timestamp

tar -cf file_name.tar file_name 

2) Tạo tập tin tar với khả năng nén và không có dấu thời gian

tar -cf file_name | gzip -n > file_name.tar.gz 

3) cách thay thế

GZIP=-n tar -czf file_name.tar.gz file_name 

Lưu ý: '-n' sẽ không thêm dấu thời gian và tên

4) Để giải nén tập tin tar

tar -xf file_name.tar and tar -xzf file_name.tar.gz 

Để xác minh bạn có thể làm như thế này

file file_name.tar or file_name.tar.gz 
output = file_name.tar.gz: gzip compressed data, from Unix 
+1

'tar -c' không bao gồm thời gian sửa đổi (dấu thời gian) trong kho lưu trữ. –

Các vấn đề liên quan