在终端中,如何查找大于或小于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.


评论


@Jay:在“测试”部分的开头找到了一个人:“数字参数可以指定为+ n表示大于n,-n表示小于n,n表示完全为n。”

–丹尼斯·威廉姆森
2010-10-29 2:14

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

– Slartibartfast
2010-10-29 2:24

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

–天猫
2010-10-29 5:48

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

–杰伊
2010-10-29 13:07

我刚刚发现BSD手册页确实描述了+/-内容。在“ Primaries”部分的末尾。 –所有带有数字参数的主键都允许数字前加一个加号(“ +”)或一个减号(“-”)。前面的加号表示“大于n”,前面的减号表示“小于n”,都不表示“正好n”

–杰伊
2010-10-29 14:14

#2 楼

我认为单独使用find可能会有用,而无需使用AWK。例如,

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


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

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

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

#3 楼

对于这类事情,AWK确实很容易。关于文件大小检查,可以使用以下方法来进行操作,如您所要求的:

列出大于200字节的文件:

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


列出少于200个字节的文件并将列表写入文件:

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


列出0字节的文件,将列表记录到文件中并删除空文件:

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


评论


解析ls不好

–phuclv
17年3月18日在13:29

用管道输送到tee和仅重定向到文件(例如ls -l> filelog(或ls -l >> filelog))有什么区别?

–奥马尔·奥斯曼(OmarOthman)
17 Mar 30 '17 at 12:04

#4 楼

大于2000个字节:

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


小于2000个字节:

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


评论


这很不好,因为du占用了磁盘上的空间。这与文件大小不同。例如,如果您具有压缩文件系统(btrfs / zfs),则du将与ls给出不同的结果,后者显示实际的解压缩大小。

–克里斯·斯科特
18年8月28日在15:18