2012-11-08 40 views
30

Làm cách nào để hiển thị tất cả các tệp lớn hơn 10k byte trong thư mục hiện tại và các thư mục con của nó.Liệt kê các tệp trên một kích thước cụ thể trong thư mục hiện tại và tất cả các thư mục con

Đã thử ls -size +10k nhưng điều đó không hiệu quả.

+0

bạn có thể mở rộng câu hỏi này hoặc ít nhất là giải thích tại sao hai giải pháp được đăng - và hoạt động không phù hợp với nhiệm vụ của bạn. (chỉnh sửa: thêm vui lòng) – matchew

+1

'ls' không có bất kỳ tùy chọn nào để lọc đầu ra theo kích cỡ. Nó có một tùy chọn '--size' (không có đối số) để in kích thước của mỗi tệp trong các khối. Nhân tiện, '-size + 10k' có vẻ giống như cú pháp được sử dụng với' find'. – doubleDown

+0

Stack Overflow là trang web cho các câu hỏi lập trình và phát triển. Câu hỏi này dường như không có chủ đề vì nó không phải là về lập trình hay phát triển. Xem [Tôi có thể hỏi những chủ đề gì ở đây] (http://stackoverflow.com/help/on-topic) trong Trung tâm trợ giúp. Có lẽ [Super User] (http://superuser.com/) hoặc [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sẽ là một nơi tốt hơn để hỏi. Đồng thời xem [Tôi nên đăng câu hỏi về Dev Ops ở đâu?] (Http://meta.stackexchange.com/q/134306) – jww

Trả lời

64

find . -size +10k -exec ls -lh {} \+

phần đầu tiên của việc này là giống hệt nhau để @sputnicks trả lời, và sucesffully tìm tất cả các tệp trong thư mục trên 10k (không nhầm lẫn k với K), phần bổ sung của tôi, phần thứ hai sau đó thực thi ls -lh hoặc ls that li sts (-l) các tập tin theo kích thước có thể đọc được của con người (-h). phủ nhận h nếu bạn thích. dĩ nhiên là {} là file chính nó, và \+ chỉ đơn giản là một thay thế cho \;

mà trong thực tế \; sẽ lặp lại hay:

ls -l found.file; ls -l found.file.2; ls -l found.file.3

nơi \+ hiển thị nó như là một tuyên bố hoặc:

ls -l found.file found.file.2 found.file.3

nhiều hơn trên \; vs + với find

Bổ sung, bạn có thể muốn danh sách được sắp xếp theo kích thước. Đó là tương đối dễ thực hiện. Tôi sẽ ở -s tùy chọn để ls, vì vậy ls -ls và sau đó ống nó để sort -n để sắp xếp số lượng

đó sẽ trở thành:

find . -size +10k -exec ls -ls {} \+ | sort -n

hoặc theo thứ tự ngược thêm một -r:

find . -size +10k -exec ls -ls {} \+ | sort -nr

cuối cùng, tiêu đề của bạn cho biết tìm thấy lớn nhất tệp trong thư mục. Bạn có thể thực hiện điều đó bằng cách sau đó chuyển mã tới tail

find . -size +10k -exec ls -ls {} \+ | sort -n | tail -1 sẽ tìm cho bạn tệp lớn nhất trong thư mục và các thư mục con của nó.

lưu ý rằng bạn cũng có thể sắp xếp tệp theo kích thước bằng cách sử dụng-S và phủ nhận nhu cầu sắp xếp. nhưng để tìm các tập tin lớn nhất bạn sẽ cần phải sử dụng đầu để

find . -size +10k -exec ls -lS {} \+ | head -1

lợi ích của làm việc đó với -S và không sort là một, bạn không cần phải gõ sort -n và hai bạn cũng có thể sử dụng -h tùy chọn kích thước có thể đọc được của con người.đó là một trong những yêu thích của tôi để sử dụng, nhưng không có sẵn với versisions cũ của ls, ví dụ chúng ta có một máy chủ CentOS 4 cũ tại nơi làm việc mà không có -h

+0

Đó chắc chắn không phải là điều này, xin lỗi. – eveo

+0

tôi đã thử điều này trên một thư mục w/o thư mục con và nó hoạt động hoàn hảo. hãy để tôi thử nó trên một thư mục khác. h/o - 'find' là những gì bạn đang làm sau, btw. – matchew

+0

ok, tôi đã thử nó trên một thư mục khác. đây là những gì bạn đang sau. Bạn có thể giải thích tại sao điều này chắc chắn không phải là điều này? – matchew

9

Hãy thử làm điều này:

find . -size +10k -ls 

Và nếu bạn muốn sử dụng hệ nhị phân ls:

find . -size +10k -exec ls -l {} \; 
+0

Tôi muốn hiển thị chúng với ls không tìm thấy. 'ls -l. -size + 10k' không hoạt động. – eveo

+0

Xem bài viết đã chỉnh sửa của tôi –

+0

Vẫn không hoạt động, đây là một bài tập. "Thư mục hiện tại của bạn là dir. Hiển thị tất cả các tệp trong dir (và các thư mục con của nó) lớn hơn 10k byte." – eveo

1

Bạn có thể sử dụng ls như thế:

ls -lR | egrep -v '^d' | awk '$5>10240{print}' 

Giải thích:

ls -lR   # list recursivly 
egrep -v '^d' # only print lines which do not start with a 'd'. (files) 

chỉ dòng in nơi cột thứ năm (size) là lớn hơn là 10240 bytes:

awk '$5>10240{print}' 
+0

Quá phức tạp, không phải là câu trả lời. Dù sao cũng cảm ơn. – eveo

3

tôi sẽ thêm vào @matchew câu trả lời (không đủ điểm karma bình luận):

find . -size +10k -type f -maxdepth 1 -exec ls -lh {} \; > myLogFile.txt 

-type f: chỉ định thường xuyên loại tập tin

-maxdepth 1: chắc chắn rằng nó chỉ tìm thấy file trong thư mục hiện tại

+0

(fwiw, chúng tôi gọi nó là "danh tiếng", không phải "nghiệp". Đây không phải là reddit) –

6

Tôi nhận ra rằng bài tập có thể dài hơn. Đối với bất kỳ ai khác:

Bạn đang quá phức tạp.

find . -size +10k 
Các vấn đề liên quan