Trước hết, xin thứ lỗi cho tiếng Anh kém của tôi.
Tôi đang cố gắng viết một tập lệnh shell để dọn sạch một số tệp thuộc loại nhất định trong các thư mục sao lưu của mình.
Tôi cần xóa các tệp thuộc loại nhất định, ngoại trừ 10 tệp mới nhất trong mỗi thư mục.
Cấu trúc thư mục trông như thế này:
Thư mục gốc
â
âââ thư mục_1
â âââ tệp_1.txt
â âââ tệp_2.txt
â âââ file_n.txt
â
âââ thư mục_2
â âââ tệp_1.txt
â âââ tệp_2.txt
â âââ file_n.txt
â
âââ thư mục_n
â âââ tệp_1.txt
â âââ tệp_2.txt
â âââ file_n.txt
â
Tôi đã sử dụng kịch bản từ David Foster làm cơ sở, nhưng không thể tìm ra cách làm cho nó hoạt động riêng biệt trong các thư mục khác nhau mà không cần viết thủ công từng tên thư mục trong tập lệnh.
Hiện tại, kịch bản trông như thế này:
find /volume1/rootfolder/ -type f -name *.txt -printf '%T@ %p\0' |
sắp xếp --zero-terminated --reverse --numeric-sort --field-separator=' ' --key 1,1 |
trố mắt -F ' ' -v RS='\0' -v ORS='\0' -v keep_count=10 \
'BEGIN{ maxage = systime() - keep_younger_days * 24 * 3600; }
(NR > keep_count) && (int($1) < maxage) { print(substr($0, length($1) + 2)); }' |
xargs -r0 -- rm --
Nhưng vấn đề là nó xóa tất cả các tệp trong tất cả các thư mục, ngoại trừ 10 thư mục mới nhất. Vì vậy, về tổng thể, tôi chỉ có 10 tệp trong tất cả các thư mục chứ không phải 10 tệp trong mỗi thư mục.
Vui lòng giúp tôi tìm ra cách tạo tập lệnh để xử lý từng thư mục riêng biệt.