Linux – the correct find -exec syntax

findlinux

I wanted to delete files that were greater than 2MB within a specific folder. So I ran:

find . -size +2M

And I got a list of two files

./a/b/c/file1

./a/f/g/file2

So I then run:

find . -size +2M -exec rm ;

and I get the error message Find: missing argument to -exec

I check the syntax in the man page and it says -exec command ;

So instead I try

find . -size +2M -exec rm {} +

And it works. I understand that the {} make it execute the command like rm file1 file2 instead of rm file1; rm file2;.

So why didn't the first one work?

ANSWER:

I guess I just had to RTFM a couple of times to finally understand what it was saying. Even though the first example doesn't show {}, the braces are required in all cases. And then either add \; or + depending on the desired method. Don't just read the heading. Read the description as well. Got it.

Best Answer

You can use any of the forms:

find . -size +2M -exec rm {} +

find . -size +2M -exec rm {} \;

The semicolon should be escaped!