如何查找大于x字节的文件?


237

在终端中,如何查找大于或小于x字节的文件?

我想我可以做类似的事情

find . -exec ls -l {} \;

然后将结果awk通过管道传递到文件大小进行过滤。但是,难道没有比这更简单的方法吗?

Answers:


376

采用:

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.

11
@Jay:在“测试”部分开头找到了一个男人:“数字参数可以指定为+ n表示大于n,-n表示小于n,n表示完全为n。”
丹尼斯·威廉姆森

4
手册页顶部提到了它,并描述了+和-可以应用于所有带有数字(n)参数的开关,包括+和-的含义。(在手册页中搜索TESTS,以找到描述该部分的开头)
Slartibartfast 2010年

1
@Dennis Williamson:奇怪,+和-在OS X中工作,但是手册页没有TESTS部分。实际上,与您的链接相比,它缺少很大的一部分,它缺少测试,操作,运算符等。
天花猫2010年

1
手册页的GNU版本似乎包含“测试”部分,而BSD版本则没有。linuxmanpages.com/man1/find.1.php
Jay

8
我刚刚发现BSD手册页确实描述了+/-内容。在“ Primaries”部分的末尾。-所有带有数字参数的基数都允许数字前面带有加号(“ +”)或减号(“-”)。甲前述加号是指“大于n”中,前面的负号是指“小于n”和既不是指“恰好n”

7

我认为,find如果不使用AWK,单独使用可能会很有用。例如,

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

代字号表示您要开始搜索的位置,并且结果应仅显示大于2 KB的文件。

为了使其美观,您可以使用该-exec选项执行另一个命令,该命令将列出这些目录及其大小。

有关更多信息,请阅读的手册页find


4

对于这类事情,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


用管道传输tee和直接重定向到文件(如ls -l > filelogls -l >> filelog)有什么区别?
奥马尔·奥斯曼(OmarOthman)'17

3

大于2000个字节:

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

少于2000个字节:

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

这很不好,因为du会占用磁盘上的空间。这与文件大小不同。例如,如果您具有压缩文件系统(btrfs / zfs),则du将为您提供与ls不同的结果,该结果显示了实际的解压缩大小。
克里斯·斯科特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.