Làm thế nào để tập tin scp / tar ở giữa những ngày cụ thể?


8

Tôi cần sao chép các tệp nhật ký db giữa hai máy chủ suse nơi tôi quan tâm đến các tệp CHỈ trong khoảng thời gian từ 10.3.2013 - 13.3.2013

Đó là mong muốn để nén các tập tin trước khi sao chép vì vậy tôi tar chúng và scp. Hiện tại tôi đang sử dụng tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-10cung cấp cho tôi tất cả các tệp từ 10.3.2013 đến nay. Nhưng tôi không cần tất cả chúng. Và tôi đã không tìm thấy bất kỳ chuyển đổi tar.

Câu trả lời:


12

Như Bichoy đã chỉ ra, bạn có thể sử dụng findlệnh để tìm các tệp có thời gian truy cập, tạo và sửa đổi cụ thể. Tuy nhiên, thời gian bù lại tăng theo 24 giờ và không phải lúc nào cũng thuận tiện để tính trừ khi bạn muốn thứ gì đó từ một số lượng cụ thể của 'ngày' trước. Bạn sẽ cần kết hợp điều đó với -daystart'làm tròn' đến đầu ngày.

Tôi nghĩ thuận tiện hơn trong trường hợp của bạn, là tùy chọn -newermt sẽ lấy dữ liệu (chứ không phải tên của tệp tham chiếu như hầu hết các phiên bản -newerXY)

Cùng với đó là find's -print0tùy chọn để xử lý file với các không gian trong tên và tùy chọn -type fkhông nhận được bất kỳ thư mục trong giai đoạn bạn đang quan tâm:

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | xargs -0 tar -cvzf /tmp/saas_archive_logs.tar.gz 

Có một vấn đề lớn với điều đó: trong trường hợp số lượng tệp được tìm thấy trở nên dài, xargssẽ gọi lệnh của nó (trong trường hợp này tar) nhiều lần khi xargscần điều chỉnh các đối số trên dòng lệnh không phải là vô hạn. Để phá vỡ cái mà tôi luôn sử dụng cpio, nó đọc tên tập tin từ stdin. Với --format=ustartham số để có được tệp tar POSIX, và trong trường hợp của bạn, bạn sẽ cần dẫn đầu ra qua gzipđể có kết quả mong muốn:

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | cpio --create --null  --format=ustar \
   | gzip > /tmp/saas_archive_logs.tar.gz

Tôi có thể chỉ định giờ và phút khi sử dụng mã của mình không?
Radek

Tôi đã thử trước khi đăng bình luận của mình nhưng ... "tìm: Tôi không thể tìm ra cách diễn giải` 201302050000 'như một ngày hoặc thời gian "
Radek

@Radek Câu trả lời ngắn gọn là Có. Tôi sẽ sử dụng YYYYMMDDThhmm để không phải đối phó với không gian. Câu trả lời dài: man find sẽ cho bạn biết: Thông số kỹ thuật thời gian được diễn giải như đối với tùy chọn -d của ngày GNU và với ngày con người bạn sẽ tìm thấy... a mostly free format human readable date string ..... A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers
Anthon

@Radek cảm ơn vì đã chỉ ra lỗi, vì tôi không thể chỉnh sửa nhận xét của mình, tôi đã xác nhận lại một lỗi mới với phần Tđược chèn giữa Ngày và Giờ. Điều đó tôi đã thử nghiệm và làm việc. Bằng cách nào đó findkhông biết cách phân tách chuỗi khác (có lẽ vì đó có thể là YYMMDDhhmmss thay vì YYYYMMDDhhmm. Tôi nghĩ rằng ngày đó sẽ cần một dấu chấm cho giây ( .ss) nhưng có lẽ chỉ để đặt ngày.
Anthon

4

Bạn có thể kiểm tra findlệnh để có được danh sách các tập tin cần xử lý. Bạn có thể chỉ định ngày bắt đầu và ngày kết thúc (lên đến giây chính xác) bằng cách sử dụng bình thường -atime, -btime, -mtime... lập luận kết hợp với -notlập luận. Sau đó, bạn có thể dẫn đầu ra xargsvà sau đó đến tar. Kiểm tra trang người đàn ông findđể biết chi tiết về các đối số thời gian.

Cập nhật: Như Anthon đã đề xuất, bạn có thể sử dụng công cụ sửa đổi +/- -mtimeđể chỉ định khoảng thời gian mà không sử dụng -not. Đây là một ví dụ:

find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2

Trường hợp d, h, m, stương ứng với ngày, giờ, phútgiây tương ứng. Điều này sẽ cung cấp cho các tệp được sửa đổi mới hơn 5d2h3m10svà cũ hơn4d0h15m20s


2
đối số phải -mtimelà phần bù trong những ngày không phải lúc nào cũng được trừ khi bạn phần bù đó được cố định giữa các lần chạy. Bạn cũng có thể sử dụng -mtime +X-mtime -Xchỉ định trước và sau X ngày trước thay vì sử dụng -not.
Anthon

Điều gì sẽ là cú pháp để xác định ngày và thời gian tuyệt đối?
Radek
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.