2017-04-07 20 views
0

ファイルを抽出せずにtarアーカイブからディレクトリ構造のみを抽出することはできますか?ディレクトリ構造のみをuntar

私は、すべてのディレクトリが末尾に/で示され

tar tvpf archive.tar | nawk '/.*\/$/{ print $NF }' | tar -xpf archive.tar --no-recursion -T - 

を使用しようとしました。したがって、nawkの場合は、行の最後に/があるものだけを出力します。問題は、tar -T - は行単位で区切られたパス名を受け入れないことです。他の空白はファイル名と同じであるため、空白を含むパッチングには使用できません。何か案が?

すべて解凍することはできませんが、ファイルを削除してからターゲットにタールコピーしてください。私は一時的なファイルなしでソリューションを作成したい。 bashの解決策が役に立つでしょう。

答えて

1

確かに、似たようなもののために私は答えを見つけました。

tar -tf file.tar | grep -v '/$' | sed 's/ /\\ /g' > excluded_files ; tar xfX file.tar excluded_files ; rm -f excluded_files 

最初の部分は、ファイル名のみをつかむためにはgrepする出力をパイプ、タールに見えますが、これらは一時ファイルに送信されます。次に、除外されたファイルを除いてtarを抽出し、最後に一時ファイルを削除します。

編集:パスのエスケープスペースを削除するためにsedが追加されました。

更新

コメントで示唆したように、これはまた、一時的なファイルやプロセスの置換がないとacheivableです。 Cheers Walter A.多くのクリーナー。あなたがCコードのビットを使用することができる場合

tar xfX file.tar <(tar -tf file.tar | grep -v '/$' | sed 's/ /\\ /g') 
+1

あなたは、プロセス置換と一時ファイルを避けることができます。 'タールXFXのfile.tarを<(タール-tf file.tar |はgrepの-v '/ $' | sedのの//\\/G ' ) ' –

+0

@WalterAああ、いいねえ、私はそれを編集として追加します。 – benjamin

-1

、あなたはlibarchive/examples/untar.cを取り、1つのチェックを追加することができます。

if (archive_entry_filetype(entry) != AE_IFDIR) continue; 
関連する問題