41

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?

Peter Mortensen
  • 12,090
  • 23
  • 70
  • 90
macek
  • 6,035
  • 17
  • 46
  • 57

2 Answers2

64

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.

Peter Mortensen
  • 12,090
  • 23
  • 70
  • 90
John T
  • 163,373
  • 27
  • 341
  • 348
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.

amit singh
  • 177
  • 5
  • 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. – Chris L. Barnes Dec 15 '20 at 10:50