I create a tarball using tar zcf arhive.tar.gz dir/ and this works ok. Now I wanted to split this into two simple archives, one only for images, the other -- for everything else.

It seems that there's not a trivial and clean way to do this. For tar I can only exclude files, which is unreasonable to exclude every extension except gif, jpg, and png.

To include I have to use find with either -exec or | xargs. This kinda works, but breaks if the filenames have spaces or special characters (apostrophes, quotation marks). So now I have to pipe all the filenames into, say, awk and escape them manually?

This is not a good idea. You can only pass so many arguments to a process (and when taring up an entire filesystem, isnt too unlikely). The better way is to pipe directly to tar with the --null --files-from arguments.
–
PatrickFeb 14 '12 at 23:53