Copy all files with a certain extension from all subdirectories

bash, cp, unix

Solution

`--parents` is copying the directory structure, so you should get rid of that.

The way you've written this, the `find` executes, and the output is put onto the command line such that `cp` can't distinguish between the spaces separating the filenames, and the spaces within the filename. It's better to do something like

$ find . -name \*.xls -exec cp {} newDir \;

in which `cp` is executed for each filename that `find` finds, and passed the filename correctly. Here's more info on this technique.

Instead of all the above, you could use zsh and simply type

$ cp **/*.xls target_directory

`zsh` can expand wildcards to include subdirectories and makes this sort of thing very easy.

Problem

Under unix, I want to copy all files with a certain extension (all excel files) from all subdirectories to another directory. I have the following command: ``` cp --parents `find -name \*.xls*` /target_directory/ ``` The problems with this command are: It copies the directory structure as well, and I only want the files (so all files should end up in /target_directory/) It does not copy files with spaces in the filenames (which are quite a few) Any solutions for these problems?

Original source

Related problems