Câu hỏi Làm cách nào để tìm các tệp lớn hơn / nhỏ hơn x byte?


Trong một thiết bị đầu cuối, làm thế nào tôi có thể tìm thấy các tập tin lớn hơn hoặc nhỏ hơn x byte?

Tôi cho rằng tôi có thể làm một cái gì đó như

find . -exec ls -l {} \;

và sau đó dẫn đến kết quả awk để lọc theo kích thước tệp. Nhưng không nên có một cách dễ dàng hơn này?


183
2017-10-28 23:09


gốc




Các câu trả lời:


Sử dụng:

find . -type f -size +4096c

để tìm các tệp lớn hơn 4096 byte.

Và:

find . -type f -size -4096c

để tìm các tệp nhỏ hơn 4096 byte.

Chú ý sự khác biệt + và - sau khi chuyển đổi kích thước.

Các -size chuyển đổi giải thích:

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b'    for 512-byte blocks (this is the default if no suffix  is
                                used)

    `c'    for bytes

    `w'    for two-byte words

    `k'    for Kilobytes       (units of 1024 bytes)

    `M'    for Megabytes    (units of 1048576 bytes)

    `G'    for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.

286
2017-10-28 23:37



@Jay: Từ người đàn ông tìm thấy ở đầu phần "Bài kiểm tra": "Đối số bằng số có thể được xác định là + n cho lớn hơn n, -n cho nhỏ hơn n, n cho chính xác n." - Dennis Williamson
Trang người đàn ông đề cập đến nó ở phía trên và mô tả rằng + và - có thể áp dụng cho tất cả các thiết bị chuyển mạch có các đối số dạng số ('n'), bao gồm cả giá trị + và -. (Tìm kiếm TESTS trong trang người đàn ông để tìm phần đầu của phần được mô tả ở đây) - Slartibartfast
Có vẻ như phiên bản GNU của trang người đàn ông có phần "Bài kiểm tra", nhưng phiên bản BSD thì không. linuxmanpages.com/man1/find.1.php - Jay
Trang người dùng Solaris có phần "Biểu hiện" giải thích nó. docs.sun.com/app/docs/doc/816-0210/6m6nb7m9j?l=en&a=view - Jay
Tôi chỉ phát hiện ra các trang người đàn ông BSD mô tả điều +/-. Cách của nó ở phần cuối của phần "Primaries". - Tất cả các số nguyên tố có tham số số cho phép số được đặt trước bằng dấu cộng (“+”) hoặc dấu trừ (“-”). Dấu cộng trước đó có nghĩa là "nhiều hơn n", dấu trừ trước có nghĩa là "nhỏ hơn n" và không có nghĩa là "chính xác n" - Jay


Tôi nghĩ find có thể hữu ích một mình mà không cần đường ống đến AWK. Ví dụ,

find ~ -type f -size +2k  -exec ls -sh {} \;

Dấu ngã cho biết nơi bạn muốn tìm kiếm của mình bắt đầu và kết quả sẽ chỉ hiển thị các tệp lớn hơn 2 kilobyte.

Để làm cho nó trở nên lạ mắt, bạn có thể sử dụng -exec tùy chọn để thực thi lệnh khác để liệt kê các thư mục này với kích thước của chúng.

Để biết thêm thông tin, hãy đọc trang người đàn ông cho find.


6
2017-10-25 22:03





AWK thực sự là khá dễ dàng cho loại điều này. Dưới đây là một số điều bạn có thể làm với nó liên quan đến kiểm tra kích thước tệp, như bạn đã hỏi:

Liệt kê các tệp lớn hơn 200 byte:

ls -l | awk '{if ($5 > 200) print $8}'

Liệt kê các tệp dưới 200 byte và ghi danh sách vào một tệp:

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

Liệt kê các tệp 0 byte, ghi lại danh sách vào một tệp và xóa các tệp trống:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm

4
2017-10-29 00:01



phân tích cú pháp ls không tốt - phuclv
Sự khác biệt giữa đường ống đến tee và chỉ chuyển hướng đến một tệp, như ls -l > filelog (hoặc là ls -l >> filelog)? - OmarOthman


Lớn hơn 2000 byte:

du -a . | awk '$1*512 > 2000 {print $2}'

Ít hơn 2000 byte:

du -a . | awk '$1*512 < 2000 {print $2} '

3
2017-10-28 23:27



Điều này là xấu như du cho không gian trên đĩa chiếm đóng. Điều này không giống như kích thước tệp. ví dụ, nếu bạn có một hệ thống tập tin nén (btrfs / zfs) du sẽ cho bạn một kết quả khác với ls cho thấy kích thước giải nén thực tế. - chris scott