62
задан 12 July 2012 в 13:33

4 ответа

tar программа была реализована во множестве путей. Например, на версии IBM Unix, AIX, tar использование -L опция, а не -T, и требует файла вместо того, чтобы позволить - указывать на stdin:

Usage: tar -{c|r|t|u|x} [ -BdDEFhilmopRUsvwZ ] [ -Number ] [ -f TarFil e ]
       [ -b Blocks ] [ -S [ Feet ] | [ Feet@Density ] | [ Blocksb ] ]
       [ -L InputList ] [-X ExcludeFile] [ -N Blocks ] [ -C Directory ] File ...
Usage: tar {c|r|t|u|x} [ bBdDEfFhilLXmNopRsSUvwZ[0-9] ] ]
       [ Blocks ] [ TarFile ] [ InputList ] [ ExcludeFile ]
       [ [ Feet ] | [ Feet@Density ] | [ Blocksb ] ] [-C Directory ] File ...
0
ответ дан 31 October 2019 в 13:36

Расширение ответ geekosaur :

find /directory | tar -cf archive.tar -T -

можно использовать stdin с -T опция.

Примечание, что при фильтрации файлов с помощью некоторого условия (например, -name опция) в целом, Вам нужно к [1 111], исключает каталоги в канале, иначе tar обработает все их содержание, которое не является тем, что Вы хотите. Так, используйте:

find /directory -type f -name "mypattern" | tar -cf archive.tar -T -

, Если Вы не используете -type, все содержание каталогов, соответствующих "mypattern", будет добавлено!

16
ответ дан 31 October 2019 в 13:36

Как уже говорилось geekosaur, нет никакой потребности передать вывод по каналу find к xargs, потому что возможно передать вывод по каналу find непосредственно к tar использование find ... -print0 | tar --null ....

Примечание незначительные различия между gnutar и bsdtar в исключении архивного файла все же.

# exclude file.tar.gz anywhere in the directory tree to be tar'ed and compressed
find . -print0 | gnutar --null --exclude="file.tar.gz" --no-recursion -czf file.tar.gz --files-from -
find . -print0 | bsdtar --null --exclude="file.tar.gz" -n -czf file.tar.gz -T -

# bsdtar excludes ./file.tar.gz in current directory by default
# further file.tar.gz files in subdirectories will get included though
# bsdtar: ./file.tar.gz: Can't add archive to itself
find . -print0 | bsdtar --null -n -czf file.tar.gz -T -

# gnutar does not exclude ./file.tar.gz in current directory by default
find . -print0 | gnutar --null --no-recursion -czf file.tar.gz --files-from -
22
ответ дан 31 October 2019 в 13:36
find /directory > filename
tar -T filename -cf archive.tar
4
ответ дан 31 October 2019 в 13:36