題 如何查找大於/小於x字節的文件?


在終端中,如何查找大於或小於x字節的文件?

我想我可以做點什麼

find . -exec ls -l {} \;

然後將結果傳遞給 awk 按文件大小過濾。但是不應該有比這更簡單的方法嗎?


193
2017-10-28 23:09


起源




答案:


使用:

find . -type f -size +4096c

查找大於4096字節的文件。

而且:

find . -type f -size -4096c

查找小於4096字節的文件。

注意尺寸切換後的+和 - 差異。

-size 開關說明:

-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.

305
2017-10-28 23:37



@Jay:來自 男人找到 在“測試”部分的開頭:“數字參數可以指定為+ n表示大於n,-n表示小於n,n表示正好n”。 - Dennis Williamson
手冊頁提到了頂部並描述了+和 - 可以應用於所有採用數字('n')參數的開關,包括+和 - 平均值。 (在手冊頁中搜索TESTS以查找描述此部分的部分的開頭) - Slartibartfast
@Dennis Williamson:很奇怪,+和 - 在OS X中工作,但是手冊頁沒有TESTS部分。事實上,與你的鏈接相比,它缺少一大塊,它缺少TEST,ACTIONS,OPERATORS等等。 - ceiling cat
看來手冊頁的GNU版本有“測試”部分,但BSD版本沒有。 linuxmanpages.com/man1/find.1.php - Jay
我剛剛發現BSD手冊頁確實描述了+/-的東西。它在“Primaries”部分結束時的方式。 - 所有採用數字參數的原色允許數字前面加號(“+”)或減號(“ - ”)。前面的加號表示“大於n”,前面的減號表示“小於n”,並不表示“正好是n” - Jay


我認為 find 沒有管道到AWK可能是有用的。例如,

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

代字號表示您希望搜索開始的位置,結果應僅顯示大於2千字節的文件。

為了使它更有趣,你可以使用 -exec 執行另一個命令的選項,用於列出這些目錄的大小。

有關更多信息,請閱讀 手冊頁 find


6
2017-10-25 22:03





對於這種事情,AWK真的很容易。以下是一些與文件大小檢查有關的事情,就像你問的那樣:

列出大於200字節的文件:

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

列出小於200字節的文件並將列表寫入文件:

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

列出0字節的文件,將列表記錄到文件中並刪除空文件:

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

4
2017-10-29 00:01



解析 ls 不好 - phuclv
管道之間有什麼區別 tee 並且只是重定向到一個文件,比如 ls -l > filelog (要么 ls -l >> filelog)? - OmarOthman


大於2000字節:

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

小於2000字節:

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

3
2017-10-28 23:27



這很糟糕,因為du佔用了磁盤上的空間。這與文件大小不同。例如,如果你有一個壓縮文件系統(btrfs / zfs),du會給你一個與ls不同的結果,顯示實際的解壓縮大小。 - chris scott