Piping find into tar...
freebsd-questions-local at be-well.ilk.org
Wed May 4 13:24:30 UTC 2011
kron24 <kron24 at gmail.com> writes:
> Dne 4.5.2011 11:42, Modulok napsal(a):
>>>> By the way, in reference to the commands above the -j option is for
>> bzip2, so the extension should be .tbz o_O
>> Thanks everyone! I went with the following, because it works regardless of
>> space characters in filenames. (Thanks for the correction on the extenion. It
>> should indeed be 'tbz' when using the 'j' flag.)
>> find -E . -regex '.*\.txt$' -print0 | xargs -0 tar -cjf result.tbz
> When the amount of files is huge then tar will be invoked twice
> or more. Thus result.tbz will contain just files from the last invocation.
Yes, xargs isn't part of the solution for this case unless you use the
update mode to tar, which will be much slower. However, tar can read
the file list from a file, which can be stdin if you want. The
equivalent of the above command would be something like:
find -E . -regex '.*\.txt$' -print0 | tar --null -T - -cjf result.tbz
> I consider cpio a better option here.
The old ways still work very well.
But it's worth noting that on FreeBSD these days, cpio(1) and tar(1) are
both implemented on the same library, so there are very few things that
one can do but the other cannot.
More information about the freebsd-questions