Delete directory older than n days

drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 09:44 2020-04-17
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 09:44 2020-04-16
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 09:44 2020-04-20
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 12:39 2020-04-14
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 12:41 2020-04-15
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 12:44 2020-04-18
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 13:18 2020-04-21

I'm trying to delete directories older than 7 days. The directories are created by date every day and there are *.gz files inside. Whevener I compress or uncompress the *.gz files, the directory modified date changes to the current date and when I run the code, it won't delete it. This is what I have so far:

find ~/delete/* -type d -mtime +7 -exec cp -r '{}' ~/test \;

Based on this

drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 09:44 2020-04-17
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 09:44 2020-04-16
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 09:44 2020-04-20
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 12:39 2020-04-14
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 12:41 2020-04-15
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 12:44 2020-04-18
drwxr-xr-x 2 dbadmin dbadmin 4096 Apr 21 13:18 2020-04-21

as output from ls and using the filename to generate a touch command to change the mtime on the directory:

ls -ld | while read f1 f2 f3 f4 f5 f6 f7 dname
do
   newtime=$( echo "$dname" | awk '{ gsub("-",""); printf("%s0000", $0) } ' )
    touch -t "$newtime" $dname
done

This only changes filetimes.

2 Likes