Nếu bạn trích xuất các tệp sao cho dấu thời gian sửa đổi trong kho lưu trữ không được lưu giữ trong các bản sao được trích xuất (nhưng các tệp được trích xuất có thời gian sửa đổi thông thường) thì cách đúng để tấn công điều này là thông qua thời gian sửa đổi. Tất cả các tệp được trích xuất có dấu thời gian sửa đổi mới hơn so với tệp hiện có được sửa đổi gần đây nhất trong thư mục đó.
Đây là một tình huống đơn giản.
Giả sử rằng không có tệp nào trong thư mục hiện tại bị chạm trong ít nhất 24 giờ. Do đó, bất cứ điều gì đã được sửa đổi trong 24 giờ qua là rác từ zipfile.
$ find . -mtime -1 -print0 | xargs -0 rm
Điều này cũng sẽ tìm thấy một số thư mục, nhưng rm
sẽ để chúng một mình. Họ có thể bị xử lý trong một lần thứ hai:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Bất kỳ thư mục nào được sửa đổi gần đây đều được sửa đổi bởi zip. Nếu rmdir
loại bỏ thành công chúng, điều đó có nghĩa là chúng trống. Các thư mục trống được chạm bởi zip có thể được tạo bởi nó: tức là đến từ kho lưu trữ. Chúng tôi không thể chắc chắn 100%. Có thể công việc giải nén đã đưa một số tệp vào một thư mục hiện có trống.
Nếu find
độ chi tiết trong 24 giờ không đủ tốt cho công việc, bởi vì các tệp trong cây đã được sửa đổi gần đây, thì tiếp theo tôi sẽ xem xét một điều đơn giản: giả sử rằng công việc giải nén không đưa bất cứ điều gì vào các thư mục con hiện có. Điều đó có nghĩa là, mọi thứ được giải nén đều là một tệp ở cấp cao nhất hoặc thư mục con mới chưa có ở đó, do đó không chứa gì ngoài tài liệu từ zip. Sau đó:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
Bây giờ chúng tôi mở filelist
trong một trình soạn thảo văn bản và xác định mục nhập đầu tiên trong danh sách không xuất phát từ zip. Chúng tôi xóa mục đó và mọi thứ khác sau nó. Những gì còn lại là các tập tin và thư mục đến từ zip. Đầu tiên chúng tôi kiểm tra trực quan các vấn đề như khoảng trắng trong tên và sự xuất hiện của dấu ngoặc kép cần được thoát. Sau đó, chúng tôi có thể thêm dấu ngoặc kép xung quanh mọi thứ, nếu cần: Giả sử sau đây bạn sử dụng Vim:
:%s/.*/"&"/
Sau đó tham gia tất cả thành một dòng lớn:
:%j
Bây giờ chèn rm -rf
vào phía trước của nó:
Irm - rf<ESC>
Chạy dòng dưới con trỏ dưới dạng lệnh shell:
!!sh<Enter>
Chắc chắn, tôi sẽ không tự động hóa các bước của nhiệm vụ này, do rủi ro xóa các tệp đã có sẵn hoặc làm hỏng do vấn đề tên tệp.
Nếu bạn đang đi theo con đường rõ ràng để có được danh sách các đường dẫn trong zip, sau đó chụp nó vào một tệp, xem xét nó rất cẩn thận và chuyển nó thành một loại bỏ sau khi thực hiện bất kỳ chỉnh sửa cần thiết nào.
lq
tùy chọn chounzizp
, tôi chỉ thêm một số thủ thuật * nix cổ điển xung quanh câu trả lời chính của anh ấy.