How do I perform a file search in linux based on the size of the file?
hawksbill last edited by hawksbill
Also see: Man page for find.
-size n[cwbkMG] File uses n units of space, rounding up. 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 kibibytes (KiB, units of 1024 bytes) `M' for mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes) `G' for gibibytes (GiB, units of 1024 * 1024 * 1024 = 1073741824 bytes) The size is simply the st_size member of the struct stat popu‐ lated by the lstat (or stat) system call, rounded up as shown above. In other words, it's consistent with the result you get for ls -l. Bear in mind that the `%k' and `%b' format speci‐ fiers of -printf handle sparse files differently. The `b' suf‐ fix always denotes 512-byte blocks and never 1024-byte blocks, which is different to the behaviour of -ls. The + and - prefixes signify greater than and less than, as usual; i.e., an exact size of n units does not match. Bear in mind that the size is rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c. The former only matches empty files, the latter matches files from 0 to 1,048,575 bytes.
Find all nonempty files in current directory.
$ find . -size +0 . ./bigfile ./filex ./test ./bigfile2
-lsoption of find to list the results, verify they are nonempty.
$ find . -size +0 -ls 237398 9 drwxrwxr-x 3 trainer trainer 12 Nov 16 14:34 . 237376 1 -rw-rw-r-- 1 trainer trainer 195429376 Nov 16 14:34 ./bigfile 237332 1 lrwxrwxrwx 1 trainer trainer 5 Nov 14 12:38 ./filex -> filea 237402 1 drwxrwxr-x 2 trainer trainer 3 Nov 14 11:45 ./test 237378 1 -rw-rw-r-- 1 trainer trainer 498598912 Nov 16 14:34 ./bigfile2
Find files that are nonempty and less than 10 blocks. (512 bytes) is 1 block, the default in find. This use the boolean logic AND
-aoption, is powerful as it used to find a size range.
$ find . -size +0 -a -size -10 -ls 237398 9 drwxrwxr-x 3 trainer trainer 12 Nov 16 14:34 . 237332 1 lrwxrwxrwx 1 trainer trainer 5 Nov 14 12:38 ./filex -> filea 237402 1 drwxrwxr-x 2 trainer trainer 3 Nov 14 11:45 ./test
Find an file of exacts size. Converting 195429376 blocks ends up as 187M. Notice we did not use the negative or positive symbols for the size value, which mean the exact size.
$ find . -size 187M -ls 237376 1 -rw-rw-r-- 1 trainer trainer 195429376 Nov 16 14:34 ./bigfile $ ls -lh bigfile -rw-rw-r-- 1 trainer trainer 187M Nov 16 14:34 bigfile
Find a file greater than a certain size. We use the
+sign to find file greater than the value.
$ find . -size +187M ./bigfile2 $ find . -size +187M -ls 237378 1 -rw-rw-r-- 1 trainer trainer 498598912 Nov 16 14:34 ./bigfile2 $ ls -lh bigfile2 -rw-rw-r-- 1 trainer trainer 476M Nov 16 14:34 bigfile2
© Lightnetics 2022