it-swarm-ja.tech

tarballから特定のディレクトリを抽出するにはどうすればよいですか?先頭のディレクトリを削除しますか?

wordpress tarball。具体的には_wp-includes_から_._まで)から特定のディレクトリを抽出します。tarball内のディレクトリ構造は_wordpress/wp-includes_のようですが、それが抽出されたら、_./wp-includes_が必要です。先頭のwordpressディレクトリはありません。これをどのように実行しますか?

12
xenoterracide

特定のディレクトリ(およびその内容を再帰的に)を抽出するには、コマンドラインで追加の引数としてディレクトリを渡します。 GNU tar を使用すると、--strip-componentsオプションを使用して先頭のディレクトリを削除できます(より一般的には、--transformを使用してファイル名を変換します)。 Linux以外のシステムでは、 pax (POSIXにありますが、一部のLinuxディストリビューションではデフォルトインストールから省略されています)と-sオプションを使用できます。

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

すべてを空の名前に書き換えるルールを追加することで、包含リストと書き換えルールをマージできます(「抽出しない」を意味します。ルールは、前のルールが一致しなかった場合にのみ適用されます)。

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

GNU tarがあるとすると、 --strip-components を使用できます:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

BSD tarの現在のバージョンも--strip-componentsをサポートしていると思います。最悪の場合、次のことができます。

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress
5
cjm