2

Why don't *.zip patterns work in tar :

tar cfjv backup.tar.bz2 --exclude mydir/files/*.zip mydir

Is there another syntax?

6
  • 2
    What is the output of that command? Don't you have to have the f flag last before the archive name, i.e. cjvf backup.tar.z2? Otherwise it would probably create an archive called jv.
    – Kusalananda
    Commented May 31, 2015 at 13:58
  • 4
    Try quoting the exclusion pattern, i.e. use --exclude "mydir/files/*.zip".
    – Kusalananda
    Commented May 31, 2015 at 14:13
  • @Kusalananda : no, cfjv works perfectly
    – Basj
    Commented May 31, 2015 at 19:30
  • @Kusalananda It works with quotes: --exclude "mydir/files/*.zip" , thanks!
    – Basj
    Commented May 31, 2015 at 19:31
  • Good! Yes, I saw later in the manual for tar that those very old-style command line switches are handled differently.
    – Kusalananda
    Commented May 31, 2015 at 19:48

2 Answers 2

4

You will need to quote the exclusion pattern, mydir/files/*.zip, otherwise the shell will expand it (globbing), possibly/probably matching a number of files, and the meaning of you command line will be very different from what you intended.

This means changing you original tar command line into

$ tar cfjv backup.tar.bz2 --exclude "mydir/files/*.zip" mydir

I initially thought there was something up with the cfjv switches. These are ancient command line switches and tar handles them very differently from more "modern" command line switches (prefixed by -). That's why you do not get an archive called jv even though that's what's following the f switch.

The manual for tar on Mac OS X mentions this under the "COMPATIBILITY" section:

The bundled-arguments format is supported for compatibility with historic implementations. It consists of an initial word (with no leading - character) in which each character indicates an option. Arguments follow as separate words. The order of the arguments must match the order of the corresponding characters in the bundled command word. For example,

      tar tbf 32 file.tar

specifies three flags t, b, and f. The b and f flags both require arguments, so there must be two additional items on the command line. The 32 is the argument to the b flag, and file.tar is the argument to the f flag.

0

To search for all .zip files in current directory and all sub-directories try: this

 find ./foldername -type f -name '*.zip'

To Exclude all .zip files in current directory and all sub-directories try this:

 find ./foldername -type f -name '*.zip' > exclude.txt

To Create tar Archive excluding all .zip files in current directory and all sub-directories try this:

tar -zcvf backup_foldername.tar.gz -X exclude.txt ./foldername

You must log in to answer this question.

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