Làm cách nào tôi có thể tìm thấy các tệp lớn hơn / nhỏ hơn x byte?


237

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 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 kết quả đến 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 thế này?

Câu trả lời:


376

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.

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

Công -sizetắc 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.

11
@Jay: Từ người đàn ông tìm thấy ở đầu phần "Thử nghiệm": "Đối số số có thể được chỉ định là + n cho lớn hơn n, -n với giá trị nhỏ hơn n, n cho chính xác n."
Dennis Williamson

4
Trang man đề cập đến phần trên cùng và mô tả rằng + và - có thể áp dụng cho tất cả các công tắc có tham số ('n'), bao gồm cả ý nghĩa + và -. (Tìm kiếm KIỂM TRA trong trang hướng dẫn để tìm phần đầu của phần được mô tả)
Slartibartfast

1
@Dennis Williamson: lạ, + và - hoạt động trong OS X, nhưng trang nam không có phần KIỂM TRA. Trên thực tế, nó thiếu một đoạn lớn so với liên kết của bạn, đó là thiếu KIỂM TRA, HÀNH ĐỘNG, HOẠT ĐỘNG, trong số những người khác.
mèo trần

1
Nó xuất hiện phiên bản GNU của trang man có phần "Thử nghiệm", nhưng phiên bản BSD thì không. linuxmanpages.com/man1/find.1.php
Jay

8
Tôi chỉ tìm ra các trang người đàn ông BSD mô tả điều +/-. Cách của nó ở cuối phần "Bầu cử sơ bộ". - Tất cả các nguyên tắc có tham số số cho phép số được đặt trước dấu cộng (số + +) hoặc dấu trừ (số - -). Dấu cộng trước có nghĩa là nhiều hơn nỏ, một dấu trừ trước có nghĩa là ít hơn nỏ và cũng không có nghĩa là chính xác là nọ
Jay

7

Tôi nghĩ rằng findcó thể hữu ích một mình mà không cần đế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 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ó lạ mắt, bạn có thể sử dụng -exectùy chọn để thực thi một lệnh khác là 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, đọc lên trang người đàn ông chofind .


4

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


Sự khác biệt giữa đường ống đến teevà chỉ chuyển hướng đến một tệp, như ls -l > filelog(hoặc ls -l >> filelog) là gì?
OmarOthman

3

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} '

Điều này là xấu vì du cho không gian trên đĩa bị chiếm dụng. Đây không giống như một kích thước tập tin. ví dụ: nếu bạn có một hệ thống tệp 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
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.