10.4 根据文件大小搜索文件

file -size

有时,可能需要根据文件的大小查找文件,find命令可以进行这样的搜索。使用-size选项指定文件大小,在其后的数字后面加一个字符,表示使用的单位。如果不提供单位字符,则使用默认值。不过,你应该明白这可能不能搜索出你想找的内容。如果没有在数字后面附加字符,默认使用的大小单位就是512字节块(文件的字节数先除以512,再取整到最接近的一个整数)。真是太复杂的数学计算。更容易的表示方法是在数字后面使用后缀,用较为通用的单位表示文件大小,如表10-1所示。 表10-1 根据文件大小搜索文件

后  缀 含  义
b 512字节块(默认值)
c 字节(Byte)
k 千字节(Kilobyte,KB)
M 兆字节(Megabyte,MB)
G 吉字节(Gigabyte,GB)

假设我们想在Clash久唱不衰的专辑(如London Calling)中查找文件大小是10 MB的歌曲。使用find命令完成这个搜索非常简单,如下所示:

  1. $ cd Punk/Clash/1979_London_Calling
  2. $ find . -size 10M
  3. ./07_-_The_Right_Profile.ogg
  4. ./08_-_Lost_In_The_Supermarket.ogg
  5. ./09_-_Clampdown.ogg
  6. ./12_-_Death_Or_Glory.ogg

真奇怪,只有4首歌?使用find命令时需要注意一点:如果只说10M,那么find命令就只搜索文件大小恰好是10 MB的文件(当然是取整后的10 MB)。如果要搜索的文件大小大于10 MB,需要在指定的大小前面加一个加号(+);如果要搜索的文件大小小于10 MB,则需要在大小前面加一个减号(-),如下所示:

  1. $ find . -size +10M
  2. ./Jimmy_Jazz.ogg
  3. ./ Lover's_Rock.ogg
  4. ./ Revolution_Rock.ogg

现在有一个问题,指定10M,搜索到的文件正好就是10 MB,而不包括那些比10 MB更大的文件;指定+10M,搜索到的文件将都超过10 MB,但不包括那些正好是10 MB的文件。如何二者兼得呢? 如果想学习如何获得大于或等于10 MB文件的方法,可以阅读10.7节。

提示 如果要搜索大型文本文件,可以在数字后面使用c。如表10-1所示,c将搜索的大小单位修改成字节。在文本文件中一个字符就是一个字节,所以记住选项c的一种简单办法就是,把它与文本文件中的“字符(character)”联系起来记忆。

例如,为搜索大文本文件,可以使用以下代码:

  1. $ find /home/scott/documents -size +500000c