Chỉ giữ lại 15 tập tin mới nhất

Lần trước anh đã giới thiệu việc tự động sao lưu (cơ sở) dữ liệu từ xa. Theo đó, mỗi ngày máy chủ sẽ tự động dump tất cả các cơ sở dữ liệu và gói lại vào một tập tin tar.gz để máy khách tự đồng bộ bằng rsync. Cứ mỗi ngày một tập tin tar.gz như vậy thì để lâu sẽ lãng phí ổ cứng.

Như anh thì anh muốn chỉ giữ lại 15 tập tin tar.gz mới nhất thôi.

Google nhiều lần thì anh có được một dòng lệnh như này:

ls -t /path/to/databases/*.tar.gz | tail -n +15 | while read LINE; do rm "$LINE"; done

Trong đó, ls -t /path/to/databases/*.tar.gz sẽ liệt kê tất cả các tập tin tar.gz theo thứ tự thời gian, từ mới đến cũ (ls -t). Gõ thử sẽ thấy mỗi tập tin nằm trên một dòng.

Tiếp theo, tail -n +15 sẽ hiển thị nội dung của lệnh ls đằng trước nhưng chỉ từ dòng thứ 15+1 trở đi (nếu có).

Phần cuối cùng sẽ xoá lần lượt các tập tin tương ứng với các dòng từ thứ 15+1 trở đi (nếu có). Sở dĩ anh phải dùng while thay vì for là bởi tên tập tin có sử dụng khoảng trống (space).

Dòng lệnh trên được anh bổ sung vào script trên máy chủ lẫn máy khách.

Vậy là lúc nào anh cũng giữ lại được 15 phiên bản cơ sở dữ liệu mới nhất mà không phải tự tay xoá các bản cũ hơn.