Hi,
please check that the cat command is inside backticks (the last one seems a single quote instead).
Moreover, the -c switch of tar command results in the re-creation of the .tar archive at each for loop iteration; to avoid this use the -r switch instead of the -c switch.
Running tar 99,000 times to archive 99,000 files is painful to watch. Also see Useless Use of Cat and Useless Use of Backticks, which may cause your program to actually fail when there's large numbers of files.
Here, use this. It will run tar the minimum number of times actually needed.
In case the OP is using GNU/Linux, that won't work. -I is a BSD-ish feature available on *BSD and Solaris (perhaps others?), but GNU uses -T instead.
I've come to embrace pax. It's consistent across platforms by virtue of being the only standardized archiver. It also fits very naturally into UNIX pipelines.
If by anywhere you mean GNU/Linux systems, perhaps. I wouldn't know what they include, since I very seldom need to touch that platform.
pax is, however, present just about everywhere else, e.g., Solaris, AIX, HP-UX, Tru64, IRIX, OS X, FreeBSD, NetBSD, OpenBSD.
If a portable and robust archiver is needed, it's probably easier to install pax with a linux distribution's package manager than cope with different versions of tar and/or having to keep a wary eye on xargs' special treatment of whitespace, single-quotes, double-quotes, and underscores.