Copy folder recursively, excluding some folders

bash, scripting, shell, unix

Solution

Use rsync:

rsync -av --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*`

Problem

I am trying to write a simple bash script that will copy the entire contents of a folder including hidden files and folders into another folder, but I want to exclude certain specific folders. How could I achieve this?

Original source