0

I've tried multiple ways of writing this and I'm executing the script myself so it isn't the crontab that isn't working. These are examples of what I've tried :

find /home/backups -mtime +1 -exec rm {} \;
find /home/backups/* -mtime +1 -exec rm {} \;
find /home/backups/ -mtime +1 -exec rm {} \;

I need the files to get deleted every day yet it just seems to not work. Running ls -ld /home/backups returns a long file list - These are the first two files

-rw-r--r-- 1 root root 8284346 Jan 12 13:00 arksave-2016-01-12--01-00-01.tar.gz
-rw-r--r-- 1 root root 8295428 Jan 12 13:15 arksave-2016-01-12--01-15-01.tar.gz

Note that is more than one day old, and these are the last two files

-rw-r--r-- 1 root root 38016124 Jan 13 12:30 arksave-2016-01-13--12-30-01.tar.gz
-rw-r--r-- 1 root root 38016163 Jan 13 12:45 arksave-2016-01-13--12-45-01.tar.gz

John Militer
  • 773
  • 4
  • 14
  • 29
Batzz
  • 21
  • 2
  • whats the problem though ? – 123 Jan 13 '16 at 13:35
  • The files just dont get deleted – Batzz Jan 13 '16 at 13:36
  • 1
    What output do you get if you just run the finds, and drop the exec's for now. Also, show us the outputs of `ls -l /home/backups` and `ls -ld /home/backups`, and tell us which user is running the command. – EightBitTony Jan 13 '16 at 13:38
  • Ah, I changed the code to `find /home/backups/* -mtime +1` yet it prints nothing, even though im 100% sure at least ~3 of my files are older than a day. Ill edit the post with a bit of the output from `ls -ld /home/backups`. Root should be running the command – Batzz Jan 13 '16 at 13:44
  • 1
    _When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago._ - this also applies to mtime. Maybe that's your problem? – TNW Jan 13 '16 at 13:48
  • 1
    Yeah, that was my problem. I just found this [link](http://unix.stackexchange.com/questions/92346/why-does-find-mtime-1-only-return-files-older-than-2-days) a second ago, i fixed it by using the code example the second answer gave `$ find . -mmin +$((60*24))` – Batzz Jan 13 '16 at 13:50
  • You can do `find . -mtime +0` as well. – TNW Jan 13 '16 at 13:51
  • Use `-mtime +0` for at least 1 day old (more than 0 day old). – Stéphane Chazelas Jan 13 '16 at 13:51

1 Answers1

2

Quoting 'TNW'

When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.

So to find a file that is only a day old, you can use either of the snippets below

find /home/backups/* -mtime +0

or

find . -mmin +$((60*24))

Batzz
  • 21
  • 2