2009-02-13 44 views
7

Cách dễ nhất/tốt nhất để tìm và xóa tệp rỗng (zero-byte) chỉ sử dụng các công cụ có nguồn gốc từ Mac OS X là gì?Xóa các tệp rỗng (zero-byte)

+0

xin vui lòng làm rõ! một tệp rỗng, tất cả các tệp trống? bạn đã thử cái gì, lỗi ở đâu? – hop

+0

Nhận xét cho câu trả lời của tôi đã làm sáng tỏ câu hỏi; cập nhật một cách thích hợp. –

+0

Cảm ơn bạn Charles Duffy. Xin lỗi vì tiếng Anh xấu của tôi: p – Bank

Trả lời

15

Dễ dàng đủ:

find . -type f -size 0 -exec rm -f '{}' + 

Để bỏ qua bất kỳ tập tin có nội dung xattr (giả sử việc thực hiện hệ điều hành MacOS find):

find . -type f -size 0 '!' -xattr -exec rm -f '{}' + 

Điều đó nói rằng, lưu ý rằng nhiều xattrs không đặc biệt hữu ích (ví dụ: com.apple.quarantine tồn tại trên tất cả các tệp đã tải xuống).

+1

-type f cuộc gọi tốt – dwc

+0

Tôi sử dụng tìm. -size 0 -exec rm {} \; nhưng thêm kiểu f phải tốt hơn – Bank

+0

Vì vậy, bằng tiếng Anh, "tìm tất cả các tệp trống trong thư mục hiện tại và xóa chúng mà không nhắc người dùng"? – endolith

1
find /path/to/stuff -empty 

Nếu đó là danh sách các tập tin mà bạn đang tìm kiếm sau đó làm cho các lệnh:

find /path/to/stuff -empty -exec rm {} \; 

Hãy cẩn thận! Sẽ không có cách nào để hoàn tác việc này!

+0

Tốt hơn để sử dụng + hơn; nếu bạn có một tìm kiếm hiện tại - theo cách đó, nó hoạt động theo cách xargs nếu nó ở trong đường ống. –

1

Sử dụng:

find . -type f -size 0b -exec rm {} ';' 

với tất cả các biến thể khác để giới hạn những gì bị xóa.

8

Bạn có thể làm giảm số lượng có tiềm năng rất lớn của các dĩa để chạy/bin/rm bởi:

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f 

Lệnh trên là rất di động, chạy trên hầu hết các phiên bản của Unix thay vì chỉ hộp Linux, và trên các phiên bản của Unix sẽ trở lại trong nhiều thập kỷ. Đối với các danh sách tệp dài, một số lệnh /bin/rm có thể được thực hiện để giữ cho danh sách không vượt quá giới hạn độ dài dòng lệnh.

Một hiệu ứng tương tự có thể đạt được với ít gõ trên hệ điều hành gần đây hơn, sử dụng một + trong find để thay thế việc sử dụng phổ biến nhất của xargs trong một phong cách vẫn vay chính nó để hành động khác ngoài /bin/rm. Trong trường hợp này, find sẽ xử lý tách danh sách tệp thật dài thành các lệnh riêng biệt /bin/rm. Các {} là thường được trích dẫn để giữ cho vỏ làm bất cứ điều gì với nó; có dấu ngoặc kép không phải luôn luôn cần thiết nhưng những phức tạp của vỏ trích dẫn quá tham gia để trang trải ở đây, vì vậy khi nghi ngờ, bao gồm các dấu nháy:

find . -type f -size 0 -exec /bin/rm -f '{}' + 

Trong Linux, các cách tiếp cận ngắn hơn thường có sẵn sử dụng -delete. Lưu ý rằng -delete chính của find mới được triển khai trực tiếp với unlink (2) và không sinh ra lệnh zillion /bin/rm hoặc thậm chí một số lệnh xargs+ làm. Mac OS find cũng có -delete-empty bầu cử sơ bộ.

find . -type f -empty -delete 

Để dậm rỗng (và mới làm trống) các tập tin - thư mục cũng - nhiều host Linux hiện đại có thể sử dụng phương pháp hiệu quả này:

find . -empty -delete 
+1

+1 Đây là câu trả lời hay hơn. –

+1

Điều này _does_ cải thiện tính di động, được cấp - nhưng 'find -exec ... {} +' chỉ có sẵn ngoài Linux. Ngay lập tức, cả Solaris 11 và OS X hỗ trợ bổ sung gần đây này cho đặc tả POSIX để tìm (được thêm vào trong số 6 của 1003.1). –

+0

Cú pháp '+' ít di động hơn, nhưng vẫn khá cầm tay. Nó chắc chắn không có sẵn trên một số * cũ * Unixen mà * làm * có 'xargs'. 'xargs' cũng linh hoạt hơn nhiều so với' + ', mặc dù tần số cần thêm flex thực sự thấp. Tuy nhiên, tôi sẽ thêm biểu mẫu '+'. –

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