Jitesh Dani
Jitesh Dani

Reputation: 385

Checking file size

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

Answers (6)

vol7ron
vol7ron

Reputation: 42099

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 2 GB in the current directory, but don't look in subdirectories

find . -size +2G -maxdepth 1

Output it with the 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 distribution.

Upvotes: 3

juan
juan

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

Codex-Major
Codex-Major

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

thegeek
thegeek

Reputation: 2458

Try using +2G instead of MB...

Upvotes: 0

duck
duck

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

Danilo Bargen
Danilo Bargen

Reputation: 19432

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

Upvotes: 1

Related Questions