Move files to another directory which are older than a date

I am looking for a solution to move files that are year older from today. My log partition is getting full, but I can not remove them. They are needed for a long long time. Anyway one solution I came up with is:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

Would this work? Asking because of the "-mtime 365" would this move the files that are year older from today to a new location?

Thank you!


Solution 1:

You're almost right. -mtime 365 will be all files that are exactly 365 days old. You want the ones that are 365 days old or more, which means adding a + before the number like this -mtime +365.

You may also be interested in the -maxdepth 1 flag, which prevents you from moving items in sub directories.

If you want to be sure that you are only moving files, not directories, add -type f to the line.

At the end of the line we add \; so that find knows that's the end of the command we are executing.

So the line should be:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

To be on the safe side, start by just doing a ls -l instead of mv - that way you can check in advance that you're getting exactly the files you want, before re-running it with mv, like this:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;

Solution 2:

Be careful when using the above solutions, I used them and ended up moving all files in all subfolders!!!!

This command moves all files in /source directory and all subfolders under source directory:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

Instead, use option -maxdepth 1 for only files in /sourcedirectory

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

Solution 3:

You can use the below command with atime if the files are accessed often

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;