Bạn có thể thử xem ngày hoạt động như thế nào sau đây:
date -d "$(date -d "Mar 31 2019" +%F) +1 month ago"
Sun Mar 3 00:00:00 EET 2019
Vì vậy, tôi nghĩ rằng dựa trên tháng trước (không phải là tháng ba), nếu đó là tháng ba), sẽ giảm số ngày từ tháng trước so với tháng trước.
Bạn có thể thử cú pháp sau để xóa các tệp cũ hơn sau đó một số ngày (trong ví dụ dưới 31 ngày). Một dòng để giải quyết vấn đề (đây là một cách tiếp cận đơn giản).
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +31 -delete
Để có cách tiếp cận chi tiết hơn, bạn cũng có thể làm một cái gì đó như thế này: 1. Tìm số ngày cho tháng hiện tại:
cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}'
Tìm số ngày trong tháng trước:
echo "$ (cal $ (ngày +% m) $ (ngày +% y) | egrep -v" $ (ngày +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (ngày -d "+1 tháng trước" +% m) $ (ngày +% y) | egrep -v "$ (ngày +% y) | Su" | xargs | awk '{print $ NF}') | bc
Vì vậy, bây giờ chúng tôi tìm thấy sự khác biệt giữa hai tháng đó:
echo "$ (cal $ (ngày +% m) $ (ngày +% y) | egrep -v" $ (ngày +% y) | Su "| xargs | awk '{print $ NF}') -" $ ( cal $ (ngày -d "+1 tháng trước" +% m) $ (ngày +% y) | egrep -v "$ (ngày +% y) | Su" | xargs | awk '{print $ NF}') | bc
Bây giờ hãy gán một số biến cho 3 bước này. Bước 1 Tên biến: FCM Bước 2 Tên biến: FLM Bước 3 Biến NAme: DCL
FCM=$(cal $(date +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}')
FLM=$(al $(date -d "+1 month ago" +%m) $(date +%y) | egrep -v "$(date +%y)|Su" | xargs | awk '{print $NF}')
DCL=$(echo "$FCM-$FLM" | bc)
Xác minh xem $ DCL bằng 0 (không) và xóa dựa trên chênh lệch giữa $ FCM và $ FLM:
if [ $DCL -ne 0 ]; then
if [ $DCL -lt 0 ]; then
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$(echo "$DCL+$FLM" | bc) -delete
elif [ $DCL -gt 0 ]; then
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$(echo "$DCL+$FLM" | bc) -delete
fi
else
find /path/to/folder/with/arhives/ -mindepth 1 -mtime +$FLM -delete
fi
Bạn cũng có thể thêm một biến vào "/ path / to / Folde / with / arhives /".
Kết luận: Nếu bạn muốn xóa các tệp cũ hơn một tháng (chính xác), bạn cần điều chỉnh số ngày chính xác, nếu bạn đang sử dụng lệnh "ngày" và "+1 tháng trước".