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 ?
Asked
Active
Viewed 2.1k times
1 Answers
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.
Volker Siegel
- 12,820
- 5
- 48
- 65
enzotib
- 92,255
- 11
- 164
- 178
-
Thanks for reply. Can I also use something to choose hours' range ? And what is the '!' used for ? – Patryk Aug 14 '11 at 09:44
-
The `!` is a not. In this example: Not newer than 2011-08-06. – con-f-use Aug 14 '11 at 09:47
-
@lordmonkey: see my editing in the answer – enzotib Aug 14 '11 at 09: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
-
Edited to add `-type f` as proposed - it's important that examples are not dangerous. – Volker Siegel Sep 14 '14 at 13:41