Как я могу построить смолу из stdin?
Как я могу передать информацию в tar
указание имен файлов?
7 ответов:
что-то типа:
tar cfz foo.tgz -T -
но имейте в виду, что это не будет работать для всех возможных имен файлов; вы должны рассмотреть
--null
опция и подачаtar
Сfind -print0
. (Тегxargs
пример не будет работать для больших списков файлов, потому что он будет порождать несколькоtar
команды.)
как уже указывал geekosaur, нет необходимости трубить выход
find
toxargs
потому что можно перенаправить вывод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 ...