web-dev-qa-db-ja.com

stdinからtarをビルドするにはどうすればよいですか?

ファイルの名前を指定して情報をtarにパイプするにはどうすればよいですか?

61
Kristopher Ives

何かのようなもの:

tar cfz foo.tgz -T -

ただし、これはすべての可能なファイル名で機能するわけではないことに注意してください。 --nullオプションを検討し、find -print0からtarをフィードする必要があります。 (xargsの例は、複数のtarコマンドを生成するため、大きなファイルリストではまったく機能しません。)

94
geekosaur

すでにgeekosaurが指摘しているように、find ... -print0 | tar --null ...を使用してfindの出力を直接xargsにパイプすることが可能であるため、findの出力をtarにパイプする必要はありません。

ただし、アーカイブファイルを除外する場合のgnutarbsdtarのわずかな違いに注意してください。

# 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
marco

拡張 ギークサウルスの答え

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

-Tオプションを指定してstdinを使用できます。

何らかの条件(たとえば-nameオプション)を使用してファイルをフィルタリングする場合、一般的にパイプで除外ディレクトリが必要です。そうでない場合、tarはすべてのコンテンツを処理します。 。だから、使用する:

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

-typeを使用しない場合、"mypattern"に一致するディレクトリのすべてのコンテンツが追加されます!

15
John Sinclair
find /directory > filename
tar -T filename -cf archive.tar
4
Felipe Alvarez

パイプを使用する代わりに、バックティックを使用できます、例:

tar cvzf archive.tgz `ls -1 *`

の代わりに ls -1 *ファイルのアーカイブに必要なリストを作成する他のコマンドを配置できます。

4
Laimoncijus

圧縮率を高めるには、bzip2を使用すると役立つ場合があります。

find $PWD -name "*.doc" > doc.filelist
tar -cvjf jumbo.tar.bz2 -T doc.filelist
0
sudar

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
Scott Centoni