Command line: piping find results to rm
command-line, find, rm, unix
Solution
You are actually piping `rm`'s output to the input of `find`. What you want is to use the output of `find` as arguments to `rm`:
find -type f -name '*.sql' -mtime +15 | xargs rm
`xargs` is the command that "converts" its standard input into arguments of another program, or, as they more accurately put it on the `man` page,
build and execute command lines from standard input
Note that if file names can contain whitespace characters, you should correct for that:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
But actually, `find` has a shortcut for this: the `-delete` option:
find -type f -name '*.sql' -mtime +15 -delete
Please be aware of the following warnings in `man find`:
Warnings: Don't forget that the find command line is evaluated
as an expression, so putting -delete first will make find try to
delete everything below the starting points you specified. When
testing a find command line that you later intend to use with
-delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot
usefully use -prune and -delete together.
P.S. Note that piping directly to `rm` isn't an option, because `rm` doesn't expect filenames on standard input. What you are currently doing is piping them backwards.
Problem
I'm trying to work out a command which deletes sql files older than 15 days. The find part is working but not the rm. ``` rm -f | find -L /usr/www2/bar/htdocs/foo/rsync/httpdocs/db_backups -type f \( -name '*.sql' \) -mtime +15 ``` It kicks out a list of exactly the files I want deleted but is not deleting them. The paths are correct. ``` usage: rm [-f | -i] [-dIPRrvW] file ... unlink file /usr/www2/bar/htdocs/foo/rsync/httpdocs/db_backups/20120601.backup.sql ... /usr/www2/bar/htdocs/foo/rsync/httpdocs/db_backups/20120610.backup.sql ``` What am I doing wrong?