ファイルのリストから入力を受け取るtarアーカイブ


166

tarでアーカイブしたいファイルのリストを含むファイルがあります。呼びましょうmylist.txt

を含む:

file1.txt
file2.txt
...
file10.txt

mylist.txt入力として受け取るTARコマンドを発行する方法はありますか?何かのようなもの

tar -cvf allfiles.tar -[someoption?] mylist.txt

これは、次のコマンドを発行した場合と同様です。

tar -cvf allfiles.tar file1.txt file2.txt file10.txt 

4
このオプション(少なくともRedHat 5.4から6.3まで)では、tarのマニュアルページは非常に役に立ちません:「-T:ファイルFから抽出または作成する名前を取得します」。「抽出または作成」は、ファイルをtarアーカイブから取り出しても、入れない場合に適用されるようです-X。excludeオプションは、古いUnix tarコマンドから存続しますが、-I(include)は存続しませんでした。
Ogre Psalm33 2013

標準のセクションですがmanEXAMPLESセクションのあるページはほとんどありません。< unix.stackexchange.com/questions/306189/… >を参照してください。
sam boosalis

回答:


262

はい:

tar -cvf allfiles.tar -T mylist.txt

mylist.txtにコメントを付けたいと思います。mylist.txt内からtarオプションを使用して回避策はありますか?
Stphane

7
@Stphaneは単純です。--excludeフラグを使用すると、これが可能になります。コメント行が「#」で始まると仮定すると、次のようなコマンドは、コメントを含む行で試行されたファイル操作を無視/除外します。つまり、コマンドは次のようになります。tar -cvf allfiles.tar --exclude = '^ # '-T mylist.txt。tarはエラーを報告しますが、tarアーカイブを確認するとエラーは発生せず、リストのすべてのファイルがアーカイブ内にあります。
Matt G

このコマンドがLinuxバリアント用であり、SunOSまたはその他のバリアント用であることを指摘して、以下の他の回答を確認してください。たとえば、SunOSの場合、テストした2つの代替手段:tar -cvf file.tar -I list.txtおよびtar -cvf file.tar $(cat list.txt)
Nasri Najib

-L mylist.txtAIX
Roland

82

GNU tar(これはLinuxであるため)を想定すると、-Tor --files-fromオプションが必要です。


3
このオプションは、FreeBSDの10の「bsdtar 3.1.2」に存在する
drue

33

パイプでファイル名を入力することもできます。

find /path/to/files -name \*.txt | tar -cvf allfiles.tar -T -

2
.txtファイルのリストが非常に大きい場合はどうなりますか?tar -c ..の代わりにtar -r ..でxargコマンドを使用する必要がありますか?
Stphane、

1
@Stphaneうーん、リストの長さはこのメソッドにとってあまり重要ではないと思います。実際、xargsはtarを繰り返し実行してデータを追加するため、xargsよりもこのメソッドの方が優れていると思いますが、実際にはメソッドを並べてテストしていません。
2016年

2
この場合のように、パイプが使用されると、オペレーティングシステムはパイプの両側にストリームを作成し、データの生成と消費を同期させます。ファイルのリストは無限である可能性があります。パイプの端に十分なストレージがある場合は、Raspberry Pi Zeroを使用してインターネット全体をtar / gzできます。
Richard Gomes

14

一部のバージョンのtar、たとえばHP-UXのデフォルトバージョン(私は11.11および11.31をテストしました)には、ファイルリストを指定するコマンドラインオプションが含まれていないため、適切な回避策は次のとおりです。

tar cvf allfiles.tar $(cat mylist.txt)

4
UUoC(不要なの使用cat)、単に$(<mylist.txt)
デビッドC.ランキン

2
これmylist.txtが大きい場合、コマンドラインの最大長を超える可能性があることに注意してください
Andre Holzner

その場合tar -T <(<mylist.txt)。この答えのように冗長です。
マイクD

7

Solarisでは、オプション-Iを使用して、コマンド行で通常指定するファイル名をファイルから読み取ることができます。コマンドラインとは対照的に、これは数十万のファイルを含むtarアーカイブを作成できます(ちょうどそれを行いました)。

したがって、例は次のようになります

tar -cvf allfiles.tar -I mylist.txt

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.