Để in tên của tất cả các tệp trong và dưới $ dir có kích thước 0:
find "$dir" -size 0
Lưu ý rằng không phải tất cả các triển khai của find
sẽ tạo ra đầu ra theo mặc định, vì vậy bạn có thể cần phải làm:
find "$dir" -size 0 -print
Hai nhận xét về vòng lặp cuối cùng trong câu hỏi:
Thay vì lặp lại mọi từ khác trong một chuỗi và xem các giá trị thay thế có bằng 0 hay không, bạn có thể loại bỏ một phần vấn đề bạn đang gặp phải với khoảng trắng bằng cách lặp qua các dòng. ví dụ:
printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
test "$size" -eq 0 && echo "$path"; done
Lưu ý rằng điều này sẽ không thành công trong trường hợp của bạn nếu bất kỳ đường dẫn nào xuất ra bởi ls chứa các dòng mới và điều này củng cố 2 điểm: không phân tích cú pháp ls
và có chính sách đặt tên lành mạnh không cho phép khoảng trắng trong các đường dẫn.
Thứ hai, để xuất dữ liệu từ vòng lặp, không cần phải lưu trữ đầu ra trong một biến chỉ cho echo
nó. Nếu bạn chỉ để cho vòng lặp ghi đầu ra của nó vào stdout, bạn sẽ thực hiện điều tương tự nhưng tránh lưu trữ nó.
man find
.