Reputation: 385
I want to check the file size in a shell script. I am trying to check if the file in a specific directory exceeds 2 GB, i.e., 2,147,483,648 bytes.
How can I easily do this in a shell script?
I have the following two 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 ~6 GB and abc is slightly less than ~2 GB . What can be the reason for both files showing up in the output?
Upvotes: 0
Views: 3109
Reputation: 42099
-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)
find . -size +2G -maxdepth 1
ls -dils
formatfind . -size +2G -maxdepth 1 -ls
I'm surprised your MB
didn't kick out an error. Example: find: invalid -size type `B'
This may be due to your distribution.
Upvotes: 3
Reputation: 21
Compare:
stat -f "%z bytes %N" ./* # FreeBSD stat syntax highlighter fix */
find . -size +$((2*1024*1024*1024))c # man 1 find | less -p '-size'
Upvotes: 2
Reputation: 13
I would suggest checking out the du
command.
Use the -h option like... du yourfilename.ext -h
and you'll get something humanly readable.
Upvotes: 0
Reputation: 171
My guess would be that find is including the file system overhead and any unused space in the cluster occupied by the file.
Upvotes: 0
Reputation: 19432
Try find . -size +2047M
without the B. This seems to work in subdirectories too.
Upvotes: 1