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 ?


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.

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.