Как я могу построить смолу из stdin?
Как я могу передать информацию в tar указание имен файлов?
7 ответов:
что-то типа:
tar cfz foo.tgz -T -но имейте в виду, что это не будет работать для всех возможных имен файлов; вы должны рассмотреть
--nullопция и подачаtarСfind -print0. (Тегxargsпример не будет работать для больших списков файлов, потому что он будет порождать несколькоtarкоманды.)
как уже указывал geekosaur, нет необходимости трубить выход
findtoxargsпотому что можно перенаправить вывод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 -
расширения geekosaur ответ:
find /directory | tar -cf archive.tar -T -вы можете использовать stdin с .
обратите внимание, что если вы фильтруете файлы с помощью некоторого условия (например,
-nameвариант) в общем вам нужно исключить директории в трубе, в противном случае tar будет обрабатывать все их содержимое, это не то, что вы хотите. Итак, используйте:find /directory -type f -name "mypattern" | tar -cf archive.tar -T -если вы не используете
-type, все содержимое каталогов соответствия"mypattern"будут добавлены !
вместо использования трубы вы можете использовать обратные ходы, например:
tar cvzf archive.tgz `ls -1 *`вместо
ls -1 *вы можете поставить любую другую команду, которая производит список необходимых для архивирования файлов
для лучшего сжатия, используя bzip2 может быть полезно.
find $PWD -name "*.doc" > doc.filelist tar -cvjf jumbo.tar.bz2 -T doc.filelist
The
tarпрограмма была реализована различными способами. Например, в IBM версии Unix,AIX,tarиспользует , а не-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 ...