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.
You can use any of the forms:
The semicolon should be escaped!
you can use.. man find
For efficiency's sake, you're usually better off using xargs:
As documented, -exec requires {} as a placeholder for the output of find.
The definitive guide for using bash and GNU tools is here
As you can see, it explicitly shows the second command you used as an example.
I'd not use -exec at all for this. find can also remove files itself:
(this is probably a GNUism though, don't know if you'd find this in non-gnu find)