Làm cách nào để hiển thị kích thước tệp tin có thể đọc được của con người trong các kết quả tìm kiếm?


11

Tôi đang cố gắng tìm tất cả các tệp lớn trên máy chủ Centos của mình. Để làm điều đó tôi đang sử dụng:

find / -maxdepth 10 -size +100000 -ls

Tôi đã cố gắng thay đổi -lsđể -lshnhưng nó không được phép.

Làm cách nào tôi có thể hiển thị các kết quả này với kích thước có thể đọc được của con người (sử dụng hậu tố k, M, chữa)?


Định nghĩa của bạn cho con người có thể đọc được là gì? Đối với tôi đó là con người đủ đọc.
manatwork

Bạn nên thử filetiện ích với find.
Ramesh

@manatwork kb, mb, gb
blarg

Câu trả lời:


10

findkhông có tùy chọn tinh vi như ls. Nếu bạn muốn ls -h, bạn cần gọi ls.

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

Tôi khuyên bạn nên -xdevtùy chọn để tránh đệ quy vào các hệ thống tệp khác, điều này sẽ vô ích nếu bạn quan tâm đến dung lượng đĩa.

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

Nếu bạn sử dụng zsh làm vỏ của mình, thì thay vì sử dụng find, bạn có thể sử dụng vòng loại toàn cầu. Giới hạn kích thước tệp là đơn giản: Ltheo sau là kích thước; kích thước có thể có một đơn vị tùy chọn trước số. Nếu bạn không quan tâm đến độ sâu tối đa, bạn có thể sử dụng **/để lặp lại vào các thư mục con. Nếu bạn quan tâm đến độ sâu tối đa, đó là chi tiết rườm rà như mẫu glob zsh thiếu một cách để thể hiện “nhiều nhất là n lần xuất hiện”. Để tránh đệ quy thiết bị chéo, sử dụng dvòng loại toàn cầu; bạn cần tìm số thiết bị mà bạn có thể hiển thị bằng statlệnh trong Linux ( stat -c %d /chỉ hiển thị số) hoặc với số statdựng sẵn của zsh (chạy zmodload zsh/statđể tải nó).

ls -lh /**/*(L+M99d$(stat -c %d /))

4

Lệnh bạn đang cố gắng đọc được cho tôi. Tuy nhiên, bạn có thể sử dụng tiện ích tập tin với tìm kiếm như dưới đây.

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

Một cách khác để làm điều này là sử dụng lệnh dưới đây.

du -BM / | sort -nr

Lệnh trên sẽ cung cấp cho bạn các tệp trong kích thước tệp được sắp xếp.

Nếu bạn đang sử dụng coreutils> 7.5 , bạn có thể dùng lệnh bên dưới để liệt kê các tệp theo kích cỡ.

du -ah / | grep -v "/$" | sort -h

Trong máy của tôi, tôi không có sort -htùy chọn có sẵn.

Như bạn đã đề cập trong bình luận, định dạng có thể đọc được của con người bạn là tệp nên có kích thước tính bằng kb , mb hoặc gb . Tôi sẽ đi với lệnh thứ hai mà tôi đã đăng làm câu trả lời. Đầu ra mà tôi nhận được khi tôi sử dụng nó trong hệ thống của mình là,

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking

Có cách nào để đặt giới hạn thấp hơn cho lệnh thứ hai của bạn không? Các tệp lớn nhất xuất hiện ở trên cùng và nhanh chóng biến mất khỏi đỉnh EDIT của vỏ - Tôi thấy bạn chỉ cần xóa r
blarg

Bạn có thể chuyển hướng đầu ra đến một tệp bằng cách thêm > outputvào lệnh. Sau đó, bạn có thể mở tệp và xem đầu ra như bạn muốn :)
Ramesh

Tôi cũng thấy điều này hiển thị các thư mục, trong khi tôi chỉ sau các tệp
blarg

du -a --max-depth=10 / | sort -rnlà gần gũi tôi có thể đến với. Tuy nhiên, trong trường hợp này, nó sẽ không hiển thị kích thước tính bằng KB, MB hoặc GB.
Ramesh

1

Tôi nghĩ những gì bạn đang theo sau là giống như sau.

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

Các -execphép bạn thực thi một lệnh và {}được thay thế bằng kết quả của phát hiện này. Cuối cùng, +là để tìm thấy nó là kết thúc của lệnh và nó được yêu cầu.


2
Trong thực tế là hoàn toàn không cần thiết để trích dẫn {}ở đây. Các dấu ngoặc đơn trong lệnh là dành cho shell nhưng shell sẽ không bao giờ nhìn thấy ls -lah <args...>lệnh nào cả - nó nhìn thấy {}, không cần phải trích dẫn. Nó findnhìn thấy ls -lah {}và nó findmở rộng {}, và như được ngụ ý bởi tên của -exectùy chọn, findsử dụng một exec*cuộc gọi hệ thống trực tiếp trên các đối số, do đó sẽ không có bất kỳ vấn đề nào với khoảng trắng vì findsẽ không thực hiện phân tách từ tên tập tin của bạn.
jw013

1
Các -atùy chọn để lslà không cần thiết vì các đối số được dự kiến sẽ được tập tin và thư mục không. GNU find sử dụng ls -dilscho -lstùy chọn, vì vậy để sao chép gần nhất nó sẽ được ls -dilsh.
jw013

man find đưa ra ví dụ sau cho ví dụ đầu tiên về việc sử dụng -exec : find . -type f -exec file '{}' \; Chạy tệp trên mỗi tệp trong hoặc bên dưới thư mục hiện tại. Lưu ý rằng các dấu ngoặc nhọn được đặt trong dấu ngoặc kép để bảo vệ chúng khỏi sự diễn giải như dấu chấm câu shell. Dấu chấm phẩy được bảo vệ tương tự bằng cách sử dụng dấu gạch chéo ngược, mặc dù dấu ngoặc đơn cũng có thể được sử dụng trong trường hợp đó.
Tim Hughes

1
Trang người đàn ông chỉ đơn giản là ủng hộ một số thận trọng không cần thiết. Nó sẽ không bị tổn thương, nhưng tôi không biết bất kỳ cái vỏ nào cần {}phải trích dẫn.
jw013
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.