In this tutorial, we are going to learn about copying files with a specific extension from one directory to another, and later we will remove the original files. For this tutorial, we are going to learn more about the cp
& find
command, and we’ll learn how can we use them together so that it is beneficial to us.
The cp command
cp command stands for copy, its command structure looks something like this :
cp {OPTION} <Source> <Destination>
For example, If you are copying only files (let’s say file1 & file2) to a new directory in the home folder, then you can simply type :
cp file1 file2 ~/new
And if you’re copying a whole directory, then you have to use the -r
(recursive) option.
cp -r Folder1 ~/new
The find Command
The find command in Linux is used to list out all the files in the current or a specific directory. Using its options, we can also list files with a specific extension. Let’s say we only want to copy mp3 files to another directory, we will first list all the mp3 files using the find command, and then we will redirect its output to the cp command. To do this, type the following command in the terminal :
find -name "*.mp3" -type f
Copy All the Files With Specific Extension
As discussed above, we can simply pipe the output of the find command to the cp command. But, there are two ways through which you can copy files. Either you can maintain the directory structure (If a file is in a folder at the source, after copying it will remain in that folder at the destination) or you can copy all the files within a folder without maintaining the directory structure. We will discuss both methods one by one.
Maintain the Directory Structure While Copying
To maintain the directory structure, we will use the cp and find command as follows :
cp --parents `find -name \*.mp3*` /Destination/Folder
The --parents
option allows us to maintain the directory structure while copying.
Don’t Maintain Directory Structure While Copying
To just copy all the mp3 files we have to a single directory, we can use the find and cp command as follows :
find . -name "*.mp3" -type f | xargs cp -vt Destination/Folder
Remove Files With a Specific Extension
Now, let’s say that you want to remove all the mp3 files from the original (source) folder now that you have copied all of them to a new destination. To execute this, we will simply use the find command to list all the mp3 files, and then just add -delete option at the end of the command.
find . -name "*.mp3" -type f -delete
Summary
Copying and deleting files using the GUI can be a hassle, as searching for individual files can take a lot of time. We hope that using this article, you were able to learn more about the find and cp command and were able to copy files in the terminal. For more details and options, you can always refer to the man pages of cp and find command.