Black Friday 2025 – NPI EA (cat = Baeldung on Linux)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Baeldung Pro – Linux – NPI EA (cat = Baeldung on Linux)
announcement - icon

Learn through the super-clean Baeldung Pro experience:

>> Membership and Baeldung Pro.

No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.

Partner – Orkes – NPI EA (tag=Kubernetes)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

1. Introduction

In this tutorial, we’ll learn three different ways to copy Linux files based on their modification date.

Let’s start with some directories and files:

$ ls -lR
.:
total 92
drwxr-xr-x. 2 root root    21 Jan  2 07:44 dir1
drwxr-xr-x. 2 root root    21 Jan  3 07:44 dir2
drwxr-xr-x. 2 root root    21 Jan  4 07:43 dir3
-rw-r--r--. 1 root root 56559 Dec 30 11:04 file1
-rw-r--r--. 1 root root 11379 Jan  1 11:05 file2
-rw-r--r--. 1 root root 21793 Jan  2 07:44 file3

./dir1:
total 0
-rw-r--r--. 1 root root 0 Jan  4 07:42 inside1

./dir2:
total 0
-rw-r--r--. 1 root root 0 Jan  4 07:43 inside2

./dir3:
total 0
-rw-r--r--. 1 root root 0 Jan  4 07:43 inside3

We have three directories and three files here. All directories have their own files (inside1, inside2, inside3)

2. Using find

We want to use the find command to copy all the files that have changed in the last three days to a specific path /root/desFolder. So first, we need to take a quick look at the output of find:

$ find . -type f
./file1
./file2
./file3
./dir1/inside1
./dir2/inside2
./dir3/inside3

Here the ‘.’ refers to the current directory. We can see that all folders are also considered. Therefore we should limit the result to consider only files by using -type.

We can easily specify files that are modified from 3 days ago by using -mtime:

$ find . -type f -mtime -3
./file2
./file3
./dir1/inside1
./dir2/inside2
./dir3/inside3

Eventually, if the result is what we expected, we use the cp command to copy the files to the destination:

$ find . -type f -mtime -3 -exec cp {} /root/desFolder \;

We should close -exec by using ‘\;‘ at the end. Moreover, we need to pay attention to a significant point. All files will be copied into one folder, so if we have duplicate names in different folders, only one will be copied.

3. Using for

Instead of our previous problem, let’s say we want to copy all files modified on a specific day. So we can use the for loop as the main command, which gets files from ls and copies those files in each step of the loop with the cp command.

Firstly, we filter the files that were changed on a specific day by using ls and grep:

$ ls -ltr | grep "Jan  2"
-rw-r--r--. 1 root root 21793 Jan  2 07:44 file3
drwxr-xr-x. 2 root root    21 Jan  2 07:44 dir1
We used -ltr to sort our list by the last modification time. Also, we used grep to specify the modification date. We should note that here we have two spaces on “Jan  2”.
Secondly, we can use for loop to copy files:
$ for i in `ls -ltr | grep "Jan  2" | awk '{print $9}' `; do cp $i* /root/desFolder; done

If we need to copy the files inside the subfolders, we can use cp -r.

We can also copy files that are modified between ‘07:00‘ and ‘07:59‘:

$ for i in `ls -ltr | grep "Jan 2 07:" | awk '{print $9}' `; do cp $i* /root/desFolder; done

Here we used ’07:‘ because grep considers details as text, so it cannot recognize the time.

4. Using cp

Lastly, let’s use cp as the main command and use find to get our desired files from the specified date until now.

We can easily use the cp command to copy files, and also we use find to filter specific files:

$ cp `find . -type f -newermt '1 Jan'` /root/desFolder
The above copies all the modified files in the current directory after 1 January.
We can also specify the time:
$ cp `find . -type f -newermt '1 Jan 2023 08:00'` /root/desFolder

If we want to specify the time, we must use date-time in the full format (e.g., DD-MM-YYY HH:MM)

5. Conclusion

There are many ways to copy files based on modification date, and we’ve looked at just three ways. We used the cp command in all of them for copying files. In sum, the usage of these ways is different in ‘how to filter files to copy’ or ‘how to specify the time’.

We may need various arguments of cp in different situations.