How can I delete all files that are older than one year in a specific folder with the bash under Linux?
4 Answers
find /u1/database/prod/arch -type f -mtime +3 -exec rm {} \;
vi samefilename
#!/bin/bash
find /u1/database/prod/arch -type f -mtime +3 -exec rm {} \;
The only 2 commands used are find and rm.
Find looks for files (-type f), this to exclude directories, that are older then 3 days (-mtime +3). All it finds is given to rm (-exec rm {} \; ).
You could also place the rm statement outside of find, which is supposed to be faster:
find /u1/database/prod/arch -type f -mtime +3 | xargs rm
-
3You can use
+
instead of\;
withfind
for perfomance similar toxargs
. Jul 26, 2010 at 14:07 -
4Also, when using xargs, please do it as
find … -print0 | xargs -0 …
(if available) so that pathnames with spaces (and even embedded line feed characters) are handled correctly. Jul 26, 2010 at 15:48
another approach I found. nice for specific dates.
touch --date="2010-1-1" x
find -not -newer x|xargs rm
tmpwatch does a good job, example:
/usr/sbin/tmpwatch $[24*365] /tmp
Exerpt from manual:
tmpwatch recursively removes files which haven’t been accessed for a given number of hours. Normally, it’s used to clean up directories which are used for temporary holding space such as /tmp.
tmpwatch [-u|-m|-c] [-MUadfqstvx] [--verbose] [--force] [--all]
[--nodirs] [--nosymlinks] [--test] [--fuser] [--quiet]
[--atime|--mtime|--ctime] [--dirmtime] [--exclude <path>]
[--exclude-user <user>] <hours> <dirs>
tmpwatcher or "tmpreaper" in ubuntu.
http://linux.about.com/library/cmd/blcmdl8_tmpwatch.htm
use with -c