Recursively copy files from one directory to another
Use:
find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;
The reason for your command not working is that names containing wildcards (*.mp3
) are expanded before the command is run, so if you had three files (01.mp3
, 02.mp3
, 03.mp3
) your effective command was:
cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music
As you can see -R
has no effect in this case.
You have specifically mentioned the files(s)/directory(ies) to be copied as using *.mp3
i.e. any file/directory name ending in .mp3
.
So any file ending in .mp3
in /media/kalenpw/MyBook/Music/
directory and similarly, any directory ending in .mp3
in /media/kalenpw/MyBook/Music/
will be copied, recursively. If there is no such matched file/directory, nothing will be copied.
Now to copy all .mp3
files from /media/kalenpw/MyBook/Music/
recursivley to directory /media/kalenpw/HDD/Music/
:
Using
bash
:shopt -s globstar cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
Using
find
:find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +