2011-06-20 37 views
6

Tôi có một kịch bản lệnh chạy mỗi đêm để sao lưu cơ sở dữ liệu trang web EC2 và html sang S3, và khi sao lưu các thư mục, nó sẽ thêm ngày vào nó để xem dễ dàng hơn. Nhưng tôi muốn nó cũng có thể xóa các thư mục sao lưu có liên quan từ 3 ngày trước. Làm thế nào tôi có thể làm các phép tính để có được ngày 3 ngày trước?Làm cách nào để thực hiện các phép tính ngày trong Shell Scripting?

#!/bin/bash 
DATE=`date +%m%d%Y` 

s3cmd put -r /var/lib/mysql/mydb/ s3://mybucket/mydb-$DATE/ 
s3cmd put -r /home/ec2-user/public_html/ s3://mybucket/public_html-$DATE/ 
s3cmd del -r s3://mybucket/mydb-(date 3 days ago) 

Trả lời

7

Bạn có thể sử dụng cờ -d cho lệnh date:

-d, --date=STRING 
    display time described by STRING, not 'now' 

Vì vậy, chỉ cần thay đổi biến ngày của bạn để:

DATE=`date +%m%d%Y -d "3 days ago"` 
2

Tại sao bạn không sử dụng thời gian sửa đổi của các thư mục? Sau đó, bạn chỉ có thể tìm kiếm chúng với tìm kiếm. Đối với exmaple:

find backups -maxdepth 1 -mtime 3 
Các vấn đề liên quan