Mac – How to copy all files recursively excluding folders into one destination folder

cpmacterminal

I have several folders like /music/1/a.mp3 and /music/2/b.mp3

All of the file names themselves are guaranteed to be different.

Is there a way, probably using the Terminal, to copy these files to /musicTemp/ excluding the folders?

In other words, the result of the two examples above should be:

/music/1/a.mp3
/music/2/b.mp3

into:

/musicTemp/a.mp3
/musicTemp/b.mp3

Best Answer

The find command will find all files of the specified pattern (-name), in this case a specific file type: *.mp3. -exec makes all following arguments to find to be taken as arguments to the command until an argument consisting of ; is encountered (at the end, with literal escape to prevent expansion by the shell). In this case, the command we wish to execute is a file copy (cp) on files that match pattern ({}) and copy those files to /destination_dir. This command should do the trick:

find /music -name "*.mp3" -type file -exec cp {} /destination_dir \;
Related Question