45

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?

0

2 Answers 2

68

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.

4
  • 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, 2010 at 17:32
  • Try /source/ /dest
    – user1931
    Feb 5, 2010 at 17:44
  • This doesn't work. I am still seeing *.FOO files being copied over.
    – Jake
    Aug 26, 2017 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, 2018 at 1:35
2

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
  • 2
    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, 2020 at 10:50

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .