linux find:搜索小于2Kb的文件会丢失1到2Kb之间的文件


3

我只是偶然发现Linux上的find命令,简而言之,我需要在某个文件夹中查找所有小于2Kb的文件,因此发出了以下命令:

find /folder_to_search_into/ -type f -size -2k

根据查找的手册页应该返回小于2 KB的所有内容

但是我注意到的是,它丢失了一些文件,大小在1到2Kb之间。

然后我发出

find /folder_to_search_into/ -type f -size -2048c

由于“ c”代表字节,因此它应该完全等效,在这种情况下,它找到了我正在寻找的所有文件。

任何想法,为什么这种行为?我可能在这里找不到明显的地方。不知道它是否与此注释有关(从“查找手册”页面-在“尺寸”部分中):

该大小不计入间接块,但计入未实际分配的稀疏文件中的块。请记住,-printf的'%k'和'%b'格式说明符对稀疏文件的处理方式不同。后缀“ b”始终表示512字节的块,从不表示1千字节的块,这与-ls的行为不同。


1
在我的头上,您应该检查文件的实际大小,它取决于文件系统(EXT4的最小值为4k)。同样基于1000与1024进行计算
。–仅浏览

文件系统为EXT4,使用该-size -2k参数找不到的文件的实际大小为1343字节。
adriano72

Answers:


3

2k不等同于2048c

为了演示,我创建了与字节大小相对应的文件:

$ ls -l
total 36
-rw-r--r-- 1 lesmana lesmana 1000 2013-10-03 15:29 s1000
-rw-r--r-- 1 lesmana lesmana 1023 2013-10-03 15:32 s1023
-rw-r--r-- 1 lesmana lesmana 1024 2013-10-03 15:32 s1024
-rw-r--r-- 1 lesmana lesmana 1025 2013-10-03 15:32 s1025
-rw-r--r-- 1 lesmana lesmana 2000 2013-10-03 15:29 s2000
-rw-r--r-- 1 lesmana lesmana 2047 2013-10-03 15:37 s2047
-rw-r--r-- 1 lesmana lesmana 2048 2013-10-03 15:37 s2048
-rw-r--r-- 1 lesmana lesmana 2049 2013-10-03 15:37 s2049
-rw-r--r-- 1 lesmana lesmana 3000 2013-10-03 15:29 s3000

这是dd我用来创建文件的命令:

dd if=/dev/zero of=filename bs=1 count=filesizeinbytes

注意:

$ find -size 2048c
./s2048
$ find -size 2k
./s2000
./s1025
./s2047
./s2048

和:

$ find -size 1024c
./s1024
$ find -size 1k
./s1023
./s1000
./s1024

的逻辑-size 2048c装置与以字节为单位的大小的所有文件为2048的逻辑-size 2k装置与大小的所有文件向上舍入到下一个千字节是2

进一步观察:

$ find -size -2k
./s1023
./s1000
./s1024
$ find -size -2048c
./s2000
./s1023
./s1025
./s2047
./s1000
./s1024

的逻辑-size -2048c是字节大小小于2048的-size -2k任何文件。的逻辑是四舍五入到下一个千字节大小的任何文件。


哇,非常感谢您竭尽全力解释我报告的行为。这非常有帮助-并且非常有意义。绝对会记住的事情。
2013年
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.