2009-09-15 29 views
5
# find /home/shantanu -name 'my_stops*' | xargs ls -lt | head -2 

Lệnh được đề cập ở trên sẽ liệt kê 2 tệp mới nhất có my_stops trong tên của tệp. Tôi muốn giữ 2 tệp này. Nhưng tôi muốn xóa tất cả các tệp khác bắt đầu bằng "my_stops" từ thư mục hiện tại.xóa các tệp sao lưu cũ

Trả lời

13

Nếu bạn tạo bản sao lưu một cách thường xuyên, nó có thể hữu ích để sử dụng tùy chọn -atime của tìm vì vậy chỉ tập tin cũ hơn hai bản sao lưu cuối cùng của bạn có thể được chọn để xóa .

Đối với các bản sao lưu hàng ngày bạn có thể sử dụng

$ find /home/shantanu -atime +2 -name 'my_stops*' -exec rm {} \; 

nhưng một biểu thức khác nhau (trừ -atime) có thể phù hợp với bạn tốt hơn.

Trong ví dụ tôi đã sử dụng +2 để có ý nghĩa hơn 2 ngày.

+2

"2" có nghĩa chính xác hai. Nếu bạn muốn "cũ hơn", bạn cần sử dụng "+2". –

+0

Điểm tốt! có, sử dụng +2 – pavium

+2

Bạn cũng không thể sử dụng "-delete"? – Duke

1

Xem here

(ls -t|head -n 2;ls)|sort|uniq -u|xargs rm

1

Điều đó sẽ hiển thị cho bạn từ dòng thứ hai về phía trước;)

tìm/home/shantanu -name 'my_stops *' | xargs ls -lt | đuôi -n 2

Chỉ cần ghi nhớ rằng tìm là đệ quy;)

+0

Bạn có thể sử dụng '-maxdepth' để kiểm soát đệ quy. –

4

Dưới đây là một giải pháp không đệ quy:

ls -t my_stops* | awk 'NR>2 {system("rm \"" $0 "\"")}' 

Giải thích:

  • Các danh sách ls lệnh các tệp có 2 mới nhất trên đầu trang
  • Lệnh awk tuyên bố rằng đối với những dòng này (NR = số lượng bản ghi, tức là dòng) lớn hơn 2, hãy xóa chúng
  • Các nhân vật quote là cần thiết chỉ trong trường hợp các tên tập tin đã nhúng gian
0

Nếu không có phương pháp đệ quy:

find /home/folder/ -maxdepth 1 -name "*.jpg" -mtime +2 
+0

Bạn có thể đưa ra một số ý kiến ​​cho OP để giải thích những gì bạn đang làm và tại sao không? – theJollySin

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