12

As in the topic: I would like to remove files in a directory that have been modified in a particular date range. How can I do this ?

1 Answer 1

18

The command GNU find is the way to go. For example, to delete all files in the current directory between 1 and 5 august, you can use the following command

find . -maxdepth 1 -type f -newermt 2011-08-01 ! -newermt 2011-08-06 -delete

It is better to execute the command without the -delete action, first, to see the listing of interested files (a good substitute could be -ls that produce an ls-like listing).

Removing the -maxdepth 1 specification will traverse all subdirectories, too.

You can also specify hours, for example

find . -maxdepth 1 -type f -newermt '2011-08-01 10:01:59' \
                         ! -newermt '2011-08-06 23:01:00' -delete

Be warned to not remove single quotes, that protect spaces between date and time.

The character ! is a negation, it should be read: newer that this date but not newer that this other date.

6
  • Thanks for reply. Can I also use something to choose hours' range ? And what is the '!' used for ?
    – Patryk
    Aug 14, 2011 at 9:44
  • The ! is a not. In this example: Not newer than 2011-08-06.
    – con-f-use
    Aug 14, 2011 at 9:47
  • @lordmonkey: see my editing in the answer
    – enzotib
    Aug 14, 2011 at 9:50
  • 3
    +1. I didn't know -delete predicate. Maybe it's not needed, but I will add -type f. Aug 14, 2011 at 10:49
  • @Michał Šrajer: good tips for -type f, I forget that. The -delete is a GNU extensions, I think.
    – enzotib
    Aug 14, 2011 at 10:52

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .