Bagaimana saya bisa menemukan file yang lebih besar / lebih kecil dari x byte?

237

Di terminal, bagaimana saya bisa menemukan file yang lebih besar atau lebih kecil dari x byte?

Saya kira saya bisa melakukan sesuatu seperti

find . -exec ls -l {} \;

dan kemudian pipa hasilnya awkuntuk memfilter menurut ukuran file. Tapi bukankah seharusnya ada cara yang lebih mudah dari ini?

langit-langit kucing
sumber

Jawaban:

377

Menggunakan:

find . -type f -size +4096c

untuk menemukan file yang lebih besar dari 4.096 byte.

Dan:

find . -type f -size -4096c

untuk menemukan file yang lebih kecil dari 4.096 byte.

Perhatikan perbedaan + dan - setelah saklar ukuran.

The -sizeberalih menjelaskan:

-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.
John T
sumber
11
@ Jay: Dari man temukan di awal bagian "Tes": "Argumen numerik dapat ditentukan sebagai + n untuk lebih besar dari n, -n untuk kurang dari n, n untuk tepat n."
Dennis Williamson
4
Halaman manual menyebutkannya di bagian atas dan menjelaskan bahwa + dan - dapat berlaku untuk semua switch yang mengambil argumen numerik ('n'), termasuk apa + dan - artinya. (Cari TEST di halaman manual untuk menemukan awal bagian di mana ini dijelaskan)
Slartibartfast
1
@ Dennis Williamson: aneh, + dan - bekerja di OS X, tetapi halaman manual tidak memiliki bagian TEST. Bahkan, ia kehilangan sebagian besar dibandingkan dengan tautan Anda, itu hilang TES, AKSI, OPERATOR, antara lain.
plafon kucing
1
Tampaknya versi GNU dari halaman manual memiliki bagian "Tes", tetapi versi BSD tidak. linuxmanpages.com/man1/find.1.php
Jay
8
Saya baru saja menemukan halaman manual BSD menjelaskan +/- hal. Caranya di akhir bagian "Primaries". - Semua pemilihan pendahuluan yang menggunakan argumen numerik memungkinkan angka didahului oleh tanda plus ("+") atau tanda minus ("-"). Tanda plus sebelumnya berarti "lebih dari n", tanda minus sebelumnya berarti "kurang dari n" dan tidak juga berarti "persis n"
Jay
7

Saya pikir findmungkin berguna sendirian tanpa pipa ke AWK. Sebagai contoh,

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

Tilde menunjukkan tempat Anda ingin memulai pencarian dan hasilnya hanya akan menampilkan file yang lebih besar dari 2 kilobyte.

Untuk membuatnya mewah, Anda dapat menggunakan -execopsi untuk mengeksekusi perintah lain yang berisi daftar direktori ini dengan ukurannya.

Untuk informasi lebih lanjut, baca halaman manual untukfind .

Siobhan
sumber
4

AWK sangat mudah untuk hal semacam ini. Berikut adalah beberapa hal yang dapat Anda lakukan dengannya terkait dengan pemeriksaan ukuran file, seperti yang Anda tanyakan:

Daftar file yang lebih besar dari 200 byte:

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

Daftar file kurang dari 200 byte dan tulis daftar ke file:

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

Daftar file 0 byte, catat daftar ke file dan hapus file kosong:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm
MaQleod
sumber
Apa perbedaan antara pemipaan teedan pengalihan ke file, seperti ls -l > filelog(atau ls -l >> filelog)?
OmarOthman
3

Lebih besar dari 2000 byte:

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

Kurang dari 2000 byte:

du -a . | awk '$1*512 < 2000 {print $2} '
Jay
sumber
Ini buruk karena du memberikan ruang pada disk yang ditempati. Ini tidak sama dengan ukuran file. mis. jika Anda memiliki sistem file terkompresi (btrfs / zfs) du akan memberi Anda hasil yang berbeda dari ls yang menunjukkan ukuran dekompresi yang sebenarnya.
chris scott