我知道,当我创建空目录时,它有自己的大小:
mkdir test && du -h test
给出:
4,0K test
但这种情况是另一回事。我在外部硬盘(ext4)上有包含 1e6 个文件(74 GB)的目录。我处理了这些文件,保存在其他目录中,并以并行脚本从该位置删除。现在这个目录应该是空的。所以没关系
ls -a raw/all
打印
. ..
但
du -h raw/all
给
19M raw/all
没有-h
我们正好有 19288B。这也是一个奇怪的结果:
ls -la raw/all
total 19292
drwxr-xr-x 2 daniel daniel 19746816 wrz 18 19:23 .
drwxrwxr-x 4 daniel daniel 4096 wrz 17 13:21 ..
到底是怎么回事?du
命令中有缓存吗?或者在处理了这么多文件之后,这些文件之后还有什么休息吗?unlink
我在 perl5 脚本中删除了归档。
更新 - 评论问题的答案
ls -aiR raw/all
raw/all:
51647758 . 51647760 ..
lsof +L1
打印 44 行,但与此目录无关。但是lsof
给出一些数字,比如19746816
.
lsof | grep raw
bash 5355 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof 5677 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
grep 5678 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof 5679 daniel cwd DIR 8,17 19746816 51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
笔记本电脑被重新启动。外部驱动器已断开连接。但du
仍然显示19M
。
ext4 文件系统中的目录会增长,但不会缩小。因此,如果在某些时候它必须占用 19M 来存储其中的文件详细信息,即使这些文件被删除,它也会保留那么多空间。如果要缩小现在为空的目录,请删除并重新创建它:
或者,保留权限:
资源: