tags:

views:

104

answers:

5

I want to check the file size in shell script. I am trying to check if the file in a specific directory exceeded 2 gb i.e 2147483648 bytes.

How can I easily do this in shell script?

I have the following 2 files:

-rw-rw-rw-    1 op       general  1977591120 Jul 02 08:27 abc
-rw-rw-rw-    1 op       general  6263142976 Jul 01 18:39 xyz

When I run find . -size +2047MB, I get both the files as output

./abc
./xyz

I expect only xyz in the output size it is ~6gb and abc is slightly less than ~2gb. WHat can be the reason for both files showing up in the output?

A: 

My guess would be that find is including the file system overhead and any unused space in the cluster occupied by the file.

duck
+1  A: 

Try find . -size +2047M without the B. This seems to work in subdirectories too.

danilo
Tried without "B" still gives both the files back in the result..
Jitesh Dani
What platform and filesystem are you using?
danilo
+2  A: 

Compare:

stat -f "%z bytes   %N"  ./*     # FreeBSD stat                                         syntax highlighter fix */

find . -size +$((2*1024*1024*1024))c    #  man 1 find | less -p '-size'
juan
This worked. woww! 'c' is for bytes.
Jitesh Dani
This helps to find if the file present in a directory is bigger or not. If I know the file which I am checking, how can I check the size of that file in the shell script?
Jitesh Dani
A: 

Have you tried giving +2G instead of MB ?

thegeek
+3  A: 

How to find files in a specific directory

What man says


-size n[cwbkMG]

         File uses n units of space.  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 Kilobytes (units of 1024 bytes)
         `M'    for Megabytes (units of 1048576 bytes) 
         `G'    for Gigabytes (units of 1073741824 bytes)  


Examples


Find files larger than 2GB in the current directory, but don't look in subdirectories

find . -size +2G -maxdepth 1

Output it with ls -dils format

find . -size +2G -maxdepth 1 -ls


Other Comments


I'm surprised your MB didn't kick out an error. Example: find: invalid -size type `B'
This may be due to your distro.

vol7ron