X bayttan daha büyük / daha küçük dosyaları nasıl bulabilirim?


237

Bir terminalde, x bayttan daha büyük veya daha küçük dosyaları nasıl bulabilirim?

Sanırım bir şey yapabilirim

find . -exec ls -l {} \;

ve ardından awkdosya boyutuna göre filtrelemek için sonucu borulayın. Fakat bundan daha kolay bir yolu olmamalı mı?

Yanıtlar:


376

kullanın:

find . -type f -size +4096c

4096 bayttan daha büyük dosyaları bulmak için.

Ve :

find . -type f -size -4096c

4096 bayttan daha küçük dosyaları bulmak için.

Boyut anahtarından sonra + ve - farkına dikkat edin.

-sizeAnahtar açıkladı:

-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: İnsandan "Testler" bölümünün başında bulunan bulma : "Sayısal argümanlar n'den büyük için + n, n'den küçük için n, -den ve n için n olarak belirtilebilir."
Dennis Williamson,

4
Man sayfası, yukarıdan söz eder ve + ve - öğelerinin + ve - ne anlama geldiğini içeren sayısal ('n') argümanlar alan tüm anahtarlara uygulanabileceğini açıklar. (Açıklandığı bölümün başlangıcını bulmak için
kılavuzdaki TESTS'i

1
@Dennis Williamson: OS X’de tuhaf, + ve - çalışır, ancak man sayfasının TESTS bölümü yoktur. Aslında, bağlantınıza kıyasla büyük bir yığın eksik, TEST, EYLEM, OPERATÖR, diğerleri arasında eksik.
tavan kedisi,

1
Adam sayfasının GNU versiyonu "Testler" bölümüne sahip, fakat BSD versiyonu yok. linuxmanpages.com/man1/find.1.php
Jay

8
BSD man sayfalarının +/- olayını açıkladığını öğrendim. "Primer" bölümünün sonundaki yolu. - Sayısal bir argüman alan tüm birinciller, sayının bir artı işareti (“+”) veya eksi işareti (“-”) ile belirtilmesine izin verir. Bir önceki artı işareti “n'den büyük” anlamına gelir, önceki eksi işareti “n'den küçük” anlamına gelmez ve hiçbiri “tam olarak n” anlamına
Jay

7

findAWK'ya yönlendirme yapmadan tek başına yararlı olabileceğini düşünüyorum . Örneğin,

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

Metin, aramanızın nerede başlamasını istediğinizi belirtir ve sonuç yalnızca 2 kilobayttan büyük dosyaları göstermelidir.

Süslü yapmak için, -execbu dizinleri boyutlarına göre listelemek üzere başka bir komutu yürütme seçeneğini kullanabilirsiniz .

Daha fazla bilgi için man sayfasınıfind okuyun .


4

AWK bu tür şeyler için gerçekten oldukça kolaydır. İstediğiniz gibi dosya boyutu kontrolü ile ilgili olarak yapabileceğiniz bazı şeyler:

200 bayttan büyük dosyaları listele:

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

200 bayttan küçük dosyaları listele ve listeyi bir dosyaya yaz

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

0 baytlık dosyaları listeleyin, listeyi bir dosyaya kaydedin ve boş dosyaları silin:

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


Piping yapmak teeve sadece ls -l > filelog(veya ls -l >> filelog) gibi bir dosyaya yönlendirmek arasındaki fark nedir ?
OmarOthman

3

2000 bayttan büyük:

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

2000 bayttan az:

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

Bu, du diskteki boşluğu boşalttığı için kötüdür. Bu bir dosya boyutu ile aynı değil. Örneğin, eğer sıkıştırılmış bir dosya sisteminiz varsa (btrfs / zfs) du, gerçek dekompresyon boyutunu gösteren ls'den farklı bir sonuç verecektir.
Chris Scott,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.