総圧縮を実行するときは、tar -xzvfを使用して偽のディレクトリを削除します。

総圧縮を実行するときは、tar -xzvfを使用して偽のディレクトリを削除します。

いくつかの「偽」先行ディレクトリが除外されるように圧縮されたターボールのパスをトリミングしたいと思います。たとえば、説明します。

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/...

おすすめ記事