Command Line – cp Command to Exclude Certain Files from Being Copied

bashcommand linecp

Is there a way to use command 'cp' to copy a directory and exclude certain files/sub-directories within it?

Best Answer

Use rsync:

rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

Note that using source and source/ are different. A trailing slash means to copy the contents of the folder source into destination. Without the trailing slash, it means copy the folder source into destination.

Alternatively, if you have lots of directories (or files) to exclude, you can use --exclude-from=FILE, where FILE is the name of a file containing files or directories to exclude.

--exclude may also contain wildcards, such as --exclude=*/.svn*

Copied From: https://stackoverflow.com/a/2194500/749232

If you want to use cp itself:

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

This assumes the target directory structure is the same as the source's.

Copied From: https://stackoverflow.com/a/4586025/749232