
いくつかの「偽」先行ディレクトリが除外されるように圧縮されたターボールのパスをトリミングしたいと思います。たとえば、説明します。
tree
コマンドで出力されるディレクトリ構造は次のとおりです。
tree /tmp/gzip-expt
/tmp/gzip-expt
├── gunzip-dir
├── gzip-dir
└── repo
└── src-tree
├── l1file.txt
└── sub-dir
└── l2file.txt
5 directories, 2 files
私はsrc-treeをgzip-dirに圧縮したかったので、私は次のようにしました:
cd /tmp/gzip-expt/gzip-dir
tar -czvf file.tar.gz /tmp/gzip-expt/repo/src-tree
次に、gunzip-dirにfile.tar.gzをgunzipします。次のようにしました。
cd /tmp/gzip-expt/gunzip-dir
tar -xzvf /tmp/gzip-expt/gzip-dir/file.tar.gz
tree /tmp/gzip-expt/gunzip-dir
次の出力が表示されます。
/tmp/gzip-expt/gunzip-dir
└── tmp
└── gzip-expt
└── repo
└── src-tree
├── l1file.txt
└── sub-dir
└── l2file.txt
tree /tmp/gzip-expt/gunzip-dir
しかし、次の出力を表示したいと思います。
/tmp/gzip-expt/gunzip-dir
└── src-tree
├── l1file.txt
└── sub-dir
└── l2file.txt
つまり、パスの「偽」tmp/gzip-expt/repo部分を見たくありません。
答え1
それらは偽ではなく、単に保存するように指示を正確に保存します。
特に、 path が与えられたら/tmp/gzip-expt/repo/src-tree
パスのどの部分を維持すべきか、ファイルを で保存するべきか/tmp/gzip-expt/repo/src-tree/l1file.txt
などsrc-tree/l1file.txt
はわかりません。l1file.txt
アーカイブに抽出時に作成される先行ディレクトリがある場合、tarballを抽出するときは異なります。そうでなければそうではありません。
相対パスを指定し、tar
相対パスが機能するために正しいディレクトリで実行するようにします。
cd /tmp/gzip-expt/repo
tar -czvf /tmp/gzip-expt/gzip-dir/file.tar.gz ./src-tree
または
cd /tmp/gzip-expt/gzip-dir
tar -C /tmp/gzip-expt/repo -czvf file.tar.gz ./src-tree
GNU のマニュアルページでは、以下について説明します-C
。
-C
,--directory=DIR
操作を実行する前に DIR に変更してください。このオプションは順序を区別します。つまり、すべての後続のオプションに影響します。
-f
しかし、私が知っている限り、最初に提供されても、そのファイルは起動されたディレクトリで使用され続けます。tar
-C
抽出時にそれを修正するには、少なくともGNU tarはファイル名の先頭を削除するように指示します。たとえばを使用すると、同様のファイル名が 。--strip-components=N
--strip-components=2
/tmp/gzip-expt/repo/src-tree/...
repo/src-tree/...