web-dev-qa-db-ja.com

タールとツリーコマンドのパイプ?

大きな圧縮ファイル(具体的には第2レベルのディレクトリのみ)のツリーを見たいので、次のコマンドを使用しました:tar -tf tarfile | tree -L 2

ただし、圧縮ファイルではなく、現在のディレクトリのツリーを出力します。他のコマンドは正常に機能します。たとえば、次の場合です。tar -tf tarfile | lesstarfileを正しく探索できます。

何か間違ったことをしているのですか、それとも他のコマンドのようにtreeをピッピングで使用できないのですか?そうでない場合、圧縮ファイルの第2レベルのディレクトリまでファイルを表示する他の方法はありますか?

2
Aurelie Navir

treeはstdinを読み取らず、代わりに実際のディレクトリ構造(現在のディレクトリまたは指定されたディレクトリ)をトラバースするため、tarファイルの目次を後処理する必要があります。 tarファイルがフル/絶対パス名で作成されている場合は、範囲を調整して、目的のディレクトリの深さを見つける必要があります。

1つのオプションはawkです。

tar -tf tarfile | awk -F/ 'NF == 3'

もう1つはcut(レベル2を超える子ディレクトリによって親が再度報告されないように一意にソートする)です。

tar -tf tarfile | cut -d/ -f1-3 | sort -u
3
Jeff Schaller