How list file by range of date?

4

2

I would like to list files with 3 days years old. I found this one at stackoverflow:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' ' | grep 2012

But I kind don't understand what the whole command means. I wonder if there is something short and simple to understand.

Valter Silva

Posted 2013-03-04T13:31:43.003

Reputation: 281

Answers

6

This should work

find . -type f -mtime -3

Explanation

find         find files
.            starting in the current directory (and it's subdirectories)
-type f      which are plain files (not directories, or devices etc)
-mtime -3    modified less than 3 days ago

See man find for details


Update

To find files last modified before a specific date and time (e.g. 08:15 on 20th February 2013) you can do something like

  touch -t 201302200815 freds_accident
  find . -type f ! -newer freds_accident
  rm freds_accident

See man touch (or info touch - ugh!)

This is moderately horrible and there may be a better way. The above approach works on ancient and non-GNU Unix as well as current Linux.

RedGrittyBrick

Posted 2013-03-04T13:31:43.003

Reputation: 70 632

Red, just a curiosity, I'm reading the man find now, and I would like to list files older than today only, daystart it seems the right choice, but how do I pass the start date ? – Valter Silva – 2013-03-04T13:58:18.230

@Valter: the -daystart option uses today's date. At 08:00 on 4th March, find -mtime +3 finds files modified longer ago than 08:00 1st March. I think find -daytime -mtime +3 should find files modified longer ago than 00:00 1st March. – RedGrittyBrick – 2013-03-04T14:08:50.327

Typo in prior comment: s/daytime/daystart/. Also see update in answer. – RedGrittyBrick – 2013-03-04T14:24:03.160

0

Find supports intervals with -ctime and -mtime +/- arguments.

e.g.

$ for y in {07..14};do \
  for m in {01..12};do \
  for d in {01..30};do \
    touch -t 20$y$m${d}0101 $y$m$d.file ;done;done;done

$ find . -mtime +0 -mtime -$(( 3 * 365 + 3 )) |sort 
./100304.file
./100305.file
./100306.file
(...)
./130302.file
./130303.file
./130304.file

If you wanted files created a in the interval between 3 years and 3 days ago upto a week ago you would use -mtime +7 -mtime -1098.

Ярослав Рахматуллин

Posted 2013-03-04T13:31:43.003

Reputation: 9 076