2011-05-05 34 views
16

Tôi chắc chắn điều này là thẳng về phía trước và được trả lời ở đâu đó, nhưng tôi không tìm được thứ tôi đang tìm kiếm. Về cơ bản, tôi đang cố gắng chạy một kịch bản cron để xóa nội dung của một thư mục nhất định sau mỗi 7 ngày. Cho đến nay tôi đã thử những điều sau,Sử dụng tìm để xóa tất cả các thư mục con (và các tệp của họ)

find /myDir -mtime 7 -exec rm -rf {} \; 

Tuy nhiên, điều này cũng sẽ xóa thư mục mẹ myDir mà tôi không muốn. Tôi cũng đã thử,

find /myDir -type f -type d -mtime 7 -delete 

dường như không làm gì cả. Tôi cũng đã thử,

fnd /myDir -type d -delete 

xóa toàn bộ thư mục gốc mà tôi cần. Tuy nhiên, một thông điệp cảnh báo đã đưa ra đọc,

đường dẫn tương đối có khả năng không an toàn

Tôi đánh giá cao nếu có ai có thể khắc phục kịch bản của tôi để nó một cách an toàn xóa tất cả các thư mục con trong thư mục.

Rất cám ơn. =)

UPDATE: tôi quyết định đi cho sau đây,

find /myDir -mindepth 1 -mtime 7 -delete 

Dựa trên những gì tôi học được từ tất cả những ai trả lời. Một lần nữa, rất cám ơn tất cả các bạn.

+0

Như đã đề cập trong một câu trả lời, lệnh cuối cùng của bạn có thể là 'find/myDir -mindepth 1 -mtime 7 -delete'. Lưu ý '+ 7' thay vì' 7'. Các cựu xóa tất cả mọi thứ cũ hơn 7 ngày và sau đó tất cả mọi thứ đó là chính xác 7 ngày tuổi. – jkukul

Trả lời

12

Hãy thử:

find /myDir -mindepth 1 -mtime 7 -exec rm -rf {} \; 
+2

Điều này làm việc mặc dù khi thực hiện tôi đã được đưa ra một thông báo nói rằng 'không có tập tin hoặc thư mục' cho mỗi tập tin/dir xóa. Tự hỏi nếu điều này là hoàn toàn bình thường hay không? Cảm ơn nhiều. Công tắc mindepth rất hữu ích và tôi thậm chí không biết nó tồn tại! – infmz

+0

Tôi đã thay đổi điều này một chút bằng cách sử dụng -delete thay vì -exec rm. Tôi không nhận được bất kỳ cảnh báo/lỗi nào theo cách này. Đây có phải là cách hay về điều bạn nghĩ không? – infmz

+0

@infmz: Tôi không phải là một fan hâm mộ lớn của -exec vì nó sinh ra một quá trình cho mỗi tập tin tìm thấy, mà là ghê tởm nếu bạn đang phù hợp với số lượng lớn các tập tin, vì vậy tôi không chắc chắn lý do tại sao bạn nhận được lỗi. Tôi giả định rằng -delete được thực hiện vì lý do đó. fwiw tôi sẽ có piped kết quả để xargs -l2000 rm-rf. – linuts

6

gì về

cd myDir/ ; find . -type d -delete 

giả định rằng bạn chạy này từ myDir thư mục cha.

Nếu bạn không thể đảm bảo mydir tồn tại, thì đây là an toàn hơn:

cd myDir/ && find . -type d -delete 
+0

@infmz: bạn được chào đón. Nếu bạn nghĩ rằng đây là câu trả lời hay cho câu hỏi của bạn, thì hãy chấp nhận câu trả lời đó (đó là cách hoạt động của stackoverflow) – MarcoS

+0

Cảm ơn lời nhắc, tôi biết nó hoạt động như thế nào. =) Khi tôi chọn giải pháp tốt nhất tôi sẽ làm. – infmz

+0

Nếu myDir không tồn tại nữa thì sao? cd thất bại và tìm xóa bắt đầu từ thư mục hiện tại .. không an toàn phải không? –

6

find /myDir -mindepth 1 -mtime 7 -delete

có lẽ nên được

find /myDir -mindepth 1 -mtime +7 -delete

(hoặc có thể mtime +6). + nghĩa là mọi thứ từ 7 ngày trở lên thay vì chính xác 7 ngày.

Các vấn đề liên quan