標準入力のファイルリストとしてtarを呼び出す移植可能な方法

標準入力のファイルリストとしてtarを呼び出す移植可能な方法

ディレクトリの内容から.tgzを作成したいと思います。また、./tarの内容から先行する""を削除したいと思います。
これが私がする方法です:

cd /path/to/files/ && find . -type f | cut -c 3- | xargs czf /path/to/tgz/myTgz.tgz

最近学んだことcmdline引数リストが長すぎると複数回呼び出される可能性があるため、を使用することはこれを達成するためのxargs最良の方法ではない可能性がありxargs、標準入力から入力ファイルのリストを読み取る機能を利用することをお勧めします。結局は知りました。tartarこの記事これを行う方法について。ところでこの推薦を見たのに..

cd /path/to/files/ && find . -type f | cut -c 3- | tar czf foo.tgz -T -

...携帯するのは不便だと思います。私の開発PCではうまく動作しますが、busyboxのターゲットでは同じコマンドを実行すると次のエラーが発生します。

tar: can't open '-': No such file or directory

だから私の質問tar:標準入力(コマンドライン引数ではなく)から提供されたファイルを呼び出す真の移植性/グローバル方法はありますか?.tgz

( //tarなどの代替手段をインストールするオプションはありません。)gnutarbsdtar

(2番目の質問:-T -「パラメータがtar」を意味するのはなぜですか?次からファイルを読むstdintarマニュアルページでは、「-T」の意味のみを見つけることができます。

FILEから抽出または生成する名前を取得する

-...しかし、一般的な""への参照は表示されません。)

ベストアンサー1

-これは、ファイル名が入力として必要なときに標準入力を解釈し、ファイル名が出力として必要なときに標準出力を解釈する一般的な規則です。これは一般的なルールなので、GNU tar のマニュアルページの短いヘルプの概要には記載されていません。完全なマニュアル(しばしば現地で使用可能info tar)。これPOSIXコマンドラインユーティリティ構文ガイドこのルールは含まれているのでかなり広範囲です(ただし、常にプログラムの作成者の選択です)。

BusyBoxユーティリティはこの規則に従います。しかし、手動tarこのオプションのサポートについての言及はなく、-T私が公開したコンピュータバージョン(Ubuntuの場合は1.27.2)もありません。 「無効なオプション - 'T'」の代わりに「:そのファイルまたはディレクトリがありません」というエラーが表示される理由がわかりません。引数なしでオプションとして解釈し、ファイル名として扱うようtarです。この場合、tar-T-ファイル名一部だけではなくアーカイブに入れるコンテンツファイルでstdin / stdout解析を使用することは意味がありません-

BusyBoxユーティリティは組み込みシステム用に構築されているため、限られた機能セットをサポートするように設計されており、GNUユーティリティの高度な機能はこれらのシステムには適していません。明らかに-T、BusyBoxデザイナーはこれが便利な機能だとは思わなかった。

BusyBox tarには、標準入力からファイル名を読み取る方法がないと思います。アーカイブディレクトリにファイルのサブセットが必要で、アーカイブにシンボリックリンクが必要ない場合、回避策は一時ディレクトリにシンボリックリンクフォレストを作成してこの一時ディレクトリを保持することです。

なぜそれを使用しているのかは不明ですfind。現在のディレクトリにあるファイルだけが必要ではありませんかtar czf /path/to/archive.tgz -- *?サブディレクトリが存在し、そのサブディレクトリにファイルをアーカイブし、ディレクトリ自体をアーカイブしたくない場合(おそらくディレクトリ構造が必要ですが、別の権限を使用してファイルを復元したい場合)、コマンドは適切です。この場合、先に進むことは./何の害にもなりません。

おすすめ記事