Sử dụng gnu find, tôi nghĩ đây là những gì bạn muốn. Nó tìm thấy tất cả các tệp thực chứ không phải thư mục (-type f), và đối với mỗi tệp in tên tệp (% p), tab (\ t), kích thước tính bằng kilobyte (% k), hậu tố "KB", sau đó một dòng mới (\ n).
find . -type f -printf '%p\t%k KB\n'
Nếu lệnh printf không định dạng mọi thứ theo cách bạn muốn, bạn có thể sử dụng lệnh execute, sau đó là lệnh bạn muốn thực thi trên mỗi tệp. Sử dụng {} cho tên tệp và kết thúc lệnh bằng dấu chấm phẩy (;). Trên hầu hết các shell, cả ba ký tự đó phải được thoát bằng dấu gạch chéo ngược.
Đây là một giải pháp đơn giản để tìm và in chúng ra bằng cách sử dụng "ls -lh", sẽ hiển thị cho bạn kích thước ở dạng con người có thể đọc được (k cho kilobyte, M cho megabyte):
find . -type f -exec ls -lh \{\} \;
Như một giải pháp thay thế khác, "wc -c" sẽ in số ký tự (byte) trong tệp:
find . -type f -exec wc -c \{\} \;
find . -name '*.ear' -exec ls -lh {} + \;
(phần mở rộng GNU) hoặcfind . -name '*.ear' -print0 | xargs -0 ls -lh
. Ngoài ra, bạn có thể muốn thêm-type f
nếu bạn chỉ quan tâm đến tệp (hoặc thêm-d
vào ls nếu bạn muốn bản thân các thư mục được bao gồm mà không có nội dung của chúng).