Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How do i need copy all files except a couple of directories from one directory to another. for eg:

cp -R test /www/test2 would copy all

But i want to exclude 2 folders called log and logs.

I tried something like:

find ~test -not -name logs,log |  cp -R test /www/test2 

But can you help me with the syntax?

share|improve this question

migrated from Oct 25 '12 at 9:31

This question came from our site for professional and enthusiast programmers.

up vote 10 down vote accepted

Use rsync:

rsync -a --exclude=logs --exclude=log from/ to/
share|improve this answer
the rynsc kinda worked cool for me! – Micheal Oct 25 '12 at 18:14
rsync is now my new friend :) Thanks, the explanation is neat – Aleks May 26 '14 at 14:56

I think you're looking for something like:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}
share|improve this answer
@sputnick see my changes. Feel free to offer up the emacs regex for this if you happen to know it. – Tim Pote Oct 24 '12 at 22:38

If using :

shopt -s extglob
cp -R test/!(log|logs) /www/test2


share|improve this answer
What happens when the structure is like so: test/someotherdir/logs? OP never said log and logs was the second-highest directory. – Tim Pote Oct 24 '12 at 22:43
If you re-read OP command find ~test -not -name logs,log log & logs should be a sub-dir. – Gilles Quenot Oct 24 '12 at 22:53
find looks recursively through all sub-directories. File globbing doesn't. For your answer to work, log and logs would have to be immediate sub-directories of test. – Tim Pote Oct 25 '12 at 0:55

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.