I have two same-size flash cards, and I want to copy contents of one to the other based on the following rules:

  1. I want all directories and subdirectories in place
  2. I want to exclude files of type .FOO, .BAR, and .ZIM (all other files are copied)
  3. Bonus: It'd be cool if it outputs the filenames as they are copied considering it will be copying ~8 GB of information

Could this be done with "find" somehow?


This would be significantly easier using rsync with its --exclude switch.

rsync -av --exclude='*.FOO' --exclude='*.BAR' --exclude='*.ZIM' /source /dest

The -v switch will provide verbose output on which files are being synchronised.

  • Little follow-up here: the copy finished and /src/* is now in /dest/src/* How to use rsync to get /src/* in /dest/*?
    – macek
    Feb 5 '10 at 17:32
  • Try /source/ /dest
    – John T
    Feb 5 '10 at 17:44
  • This doesn't work. I am still seeing *.FOO files being copied over.
    – Jake
    Aug 26 '17 at 0:03
  • It is specified how you should give the path for --exclude. If you have problems with it, check out this answer.
    – totymedli
    Jan 23 '18 at 1:35

If you have large number of extensions to exclude you can make a file and write down all the extension or file to exclude and use only one exclude option to make it simple.

rsync -ravz --exclude='./abc,txt' /source /dest

It is always good to use z for compression and r option if you have to copy recursively.

  • 1
    It is not always good to use z for compression. Unless you are transferring over a network you know to be slow, compression will slow you down. Also, if you are transferring compressed files (e.g. jpeg, mp3, most video formats), or have a slow CPU, it'll just waste time. Dec 15 '20 at 10:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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