我如何才能找到大于/小于 x 字节的文件?

我如何才能找到大于/小于 x 字节的文件?

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

我想我可以做类似的事情

find . -exec ls -l {} \;

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

答案1

使用:

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.

答案2

我认为find单独使用可能有用,而不需要通过管道传输到 AWK。例如,

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

波浪号表示您想要开始搜索的地方,结果应该只显示大于 2 千字节的文件。

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

欲了解更多信息,请阅读手册页find

答案3

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

使用fd,使用起来比find

fd -S +1g

将在当前目录下搜索任何大于 1GB 的文件

fd -S -1g

将搜索文件更小超过 1GB

相关内容