backendlinux

Linux查找大文件

About 730 wordsAbout 2 min

linux

2024-02-01

作为后端开发者,了解 linux 的一些简单操作还是很有必要的,因为不是所有的地方都会有服务器运维的人员的,这个时候就需要自己来了。 今天就简单的聊一下,当磁盘爆满时,我们如果找到占用空间大的文件。

其实很多时候,你需要了解的当前系统下存在哪些大文件,如果超多 1G 或者 100M 的文件;那么如何把这些大文件搜索出来呢? find . -type f -size +800M 但是上面的命令,我们只能看到超过 800M 大小的文件名称,但是对文件的详细信息一无所知。 find . -type f -size +800M -print0 | xargs -0 ls -l 当我们只需要找到超过 800M 的文件,并显示查找出来的文件的具体大小的时候,可以用下面命令: find . -type f -size +800M -print0 | xargs -0 du -h 如果我们需要对查找的结果按照文件的大小排序,那么可以使用下面命令 find . -type f -size +800M -print0 | xargs -0 du -h | sort -nr

如何查找 Linux 下的大目录

有的时候我们需要看下那个目录占用的总空间大, 我们用 ls -alh 只能看到当前一层的大小,我们可以用 du 来实现, 这里有一个--max-depth 的参数,就是只输出一层记录。 du -h --max-depth=1 如果想要排序可以加上 sort -n 的参数。

扩展知识说明

find 扩展说明

# 在某个路径下查找文件。在/etc下查找'*.log'的文件
find /etc -name '*.log'

# 扩展:列出某个路径下所有的文件,包括子目录
find /etc -name '*'

# find 使用正则表达式
find ./ -name '[a-z][0-9].log'

find ./ -type d(f)
find ./ -size +800M

find -print0 和 xargs -0 原理及用法

find -print0 表示在 find 的每一个结果之后加一个 NULL 字符,而不是默认加一个换行符。find 默认在每一个结果后面加一个'\n', 所以输出结果是一行一行的,当使用-print0 之后, 就变成一行了。

然后 xargs -0 表示 xargs 用 NULL 来作为分隔符。这样前后搭配就不会出现空格和换行符的错误。选择 null 作为分隔符,是因为一般编程语言把 NULL 作为字符串结束的标志,所以文件不可能以 NULL 结尾,这样确保万无一失。

比如下面这种情况的话,就很好的说明问题。

find ./ -name '*.log' | xargs rm

像是这样子的话,如果文件里面有空格,比如说file a.log 这样 xargs 就会把文件名分开,分别是 file 和 a.txt,这样子就会出问题。

rm: .//file: No such file or directory
rm: b.log: No such file or directory