I used the below command to delete files older than a year.
find /path/* -mtime +365 -exec rm -rf {} \;
But now I want to delete all files whose modified time is older than 01 Jan 2014. How do I do this in Linux?
I used the below command to delete files older than a year.
find /path/* -mtime +365 -exec rm -rf {} \;
But now I want to delete all files whose modified time is older than 01 Jan 2014. How do I do this in Linux?
You can touch your timestamp as a file and use that as a reference point:
e.g. for 01-Jan-2014:
touch -t 201401010000 /tmp/2014-Jan-01-0000
find /path -type f ! -newer /tmp/2014-Jan-01-0000 | xargs rm -rf
this works because find
has a -newer
switch that we're using.
From man find
:
-newer file
File was modified more recently than file. If file is a symbolic
link and the -H option or the -L option is in effect, the modification time of the
file it points to is always used.
This works for me:
find /path ! -newermt "YYYY-MM-DD HH:MM:SS" | xargs rm -rf
find /path ! -type f -newermt "YYYY-MM-DD HH:MM:SS" -delete
. It saves you from having to pipe everything through xargs, and having to handle filesnames with spaces or other disruptive characters. –
Sidesman -newermt
is a non-standard extension, though on Linux systems you will typically have GNU find
. This is not portable to other platforms. –
Conni date --date="today" "+%Y-%m-%d"
to get files older than today. Something like --date="last friday"
works too! find /path ! -newermt "`date --date="today" "+%Y-%m-%d"`" | xargs rm -rf
–
Canzonet find /path -type f ! -newermt "YYYY-MM-DD HH:MM:SS" -delete
thanks @Thermion –
Sidesman You can touch your timestamp as a file and use that as a reference point:
e.g. for 01-Jan-2014:
touch -t 201401010000 /tmp/2014-Jan-01-0000
find /path -type f ! -newer /tmp/2014-Jan-01-0000 | xargs rm -rf
this works because find
has a -newer
switch that we're using.
From man find
:
-newer file
File was modified more recently than file. If file is a symbolic
link and the -H option or the -L option is in effect, the modification time of the
file it points to is always used.
This other answer pollutes the file system and find
itself offers a "delete" option. So, we don't have to pipe the results to xargs and then issue an rm.
This answer is more efficient:
find /path -type f -not -newermt "YYYY-MM-DD HH:MI:SS" -delete
-delete
option is an improvement. –
Conni find ~ -type f ! -atime 4|xargs ls -lrt
This will list files accessed older than 4 days, searching from home directory.
! -atime 4
means "do not match any files accessed exactly 4 days ago". You'd need to use -atime +4
for "match file accessed more than 4 days ago". The full command would be find ~ -type f -atime +4 | xargs ls -lrt
–
Garik First I execute this
touch -t 202310080000 /tmp/olddate ---> this creates a file with the specified date
find "path to which you want to apply search" -type f ! -newer /tmp/olddate -delete -----> this deletes files from the path where you want with reference to the file created at the certain date.
© 2022 - 2025 — McMap. All rights reserved.