/dev/stdin ファイルから tar を生成する

/dev/stdin ファイルから tar を生成する

STDINを介して任意のデータを渡し、通常のファイルのように圧縮する方法を探しています。

私はこれを試しました

$ echo test | tar -cf test.tar /dev/stdin

test.tarこれにより、内容を含むファイルが提供されますdev/stdin。ファイルstdinはリンクです/proc/self/fd/0

私が望むのは、dev/stdinTARファイル内にtextを含む一般的なファイルがあるということですtest。次のような状況でも同様の状況が発生します。

$ tar -cf test.tar <(echo test)

しかし、名前は異なります。

これは可能ですか?

ベストアンサー1

私の考えでは、ここでやりたいことができないと思います。アプローチの問題は、tarファイルとディレクトリツリーを処理し、次のコマンドを提供しないことです。

$ echo test | tar -cf test.tar /dev/sdtin

次のサブシェルを使用して一時ファイルの文字列を「ラップ」しようとしても、

$ tar -cf test.tar <(echo test)

コンテンツがまだ TAR 圧縮に次の一時ファイル記述子を使用していることを確認できます。

$ tar tvf test.tar
lr-x------ vagrant/vagrant   0 2018-08-04 23:52 dev/fd/63 -> pipe:[102734]

文字列を圧縮したい場合は、ファイルコンテキストに入れる必要があります。したがって、次のようにする必要があります。

$ echo "test" > somefile && tar -cf /tmp/test.tar somefile

TARファイルにそのファイルが存在することを確認できます。

$ tar tvf /tmp/test.tar
-rw-rw-r-- vagrant/vagrant   5 2018-08-05 00:00 somefile

tarを使用したデータのコピー

長い間Unixを使用してきたほとんどの人は、おそらく次のようなパターンを見たことがあります。

$ (cd /; tar cf - .)|(cd /mnt/newroot; tar pxvf -)

私は過去にある場所から別の場所にデータをコピーするためにこれを使用しました。 SSH経由でも使用できます。他の方法については、U&L Q&Aで次のように議論されています。busyboxを使用したルートディレクトリツリーの複製

バックアップ/

ハードドライブ全体をバックアップしたい場合でも、この方法を使用できます。

$ sudo tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system /

引用する

おすすめ記事