Câu trả lời:
Điều này có thể được thực hiện với find:
find . -type f -size -1M -exec rm {} +
Lưu ý rằng điều này sẽ đệ quy xuống các thư mục con và sẽ xóa vô điều kiện tất cả các tệp nhỏ hơn 1 megabyte. Hãy cẩn thận.
find. :)
findgiới hạn số lượng đối số cho quy trình được gọi để phù hợp với giới hạn của hệ thống, ngược lại rm *, được đảm bảo là một yêu cầu quy trình duy nhất. findsẽ gọi nhiều thể hiện rmnếu cần thiết. Và tôi khá chắc chắn rằng các ký tự đặc biệt được xử lý chính xác, bao gồm các ký tự dòng mới. Tôi thích -exec rmhơn -deletevì lý do linh hoạt - như một ví dụ, cái sau cung cấp không có cách nào để xóa các tệp được bảo vệ ghi.
-1Mcó nghĩa là ít hơn một megabyte như mong muốn. Phiên bản của bạn sẽ xóa tất cả các tệp có kích thước chính xác một megabyte, đây dường như là một hoạt động hơi vô nghĩa.
find . -type f -size +1M -exec rm {} +. Lưu ý + 1M thay vì -1M.
Điều này sẽ làm công việc:
$ find <directory> -type f -size -1M -delete
-dấu này là dấu trừ có nghĩa là "dưới 1M". Nếu bạn chạy, find <directory> -type f -size +1M -deletebạn sẽ xóa tất cả các tệp lớn hơn 1M.
Chỉ dành cho sự đa dạng và hiệu suất có thể (có thể là cận biên):
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargsquá trình bổ sung .
Bạn có thể kiểm tra liên kết này http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , nó có chính xác những gì bạn muốn.
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
Bạn có thể lặp qua tất cả các tệp bằng một vòng lặp for và sau đó sử dụng du và awk để tìm kích thước tệp như trong ví dụ trên.
1M.