git-bashの既存のディレクトリにtarアーカイブを抽出します。

git-bashの既存のディレクトリにtarアーカイブを抽出します。

私はDrupal 8をというディレクトリにインストールしましたmy-D8。私はそれをdrupal 8.3.1に更新したいと思い、それをダウンロードしましたdrupal-8.3.1.tar.gz。私のディレクトリには次のものがありますsites

/d/sites $ ls
drupal-8.3.1.tar.gz  my-d8/

アーカイブを抽出しようとすると、すべてがというディレクトリに保存されますが、drupal-8.3.1これがまさに私が期待するものです。ただし、そのディレクトリ内のすべてのファイルとサブディレクトリが既存のディレクトリを上書きして追加したいと思いますmy-d8

コマンドを試しましたが、mv私のシェルでは空でない既存のサブディレクトリを上書きすることは拒否されました。

$ mv drupal-8.3.1/* my-d8/
mv: cannot move 'drupal-8.3.1/core' to 'my-d8/core': Directory not empty
mv: cannot move 'drupal-8.3.1/modules' to 'my-d8/modules': Directory not empty
...

Googleでこれを見つけました。Ubuntuの回答を尋ねるしかし、しようとすると正しく動作しません。

$ tar -xvf  drupal-8.3.1.tar.gz --directory=my-d8  --strip-components=1
drupal-8.3.1/.csslintrc
drupal-8.3.1/.editorconfig
drupal-8.3.1/.eslintignore
... ^C

リポジトリルートのファイルを上書きするのではなく、単にサブディレクトリをリポジトリに配置します。

$ ls my-d8/drupal-8.3.1/
autoload.php  composer.json  composer.lock  core/  README.txt

編集する私はdope-ghotiの答えを試しましたが、詳しく見るとうまくいきません。

$ ls
drupal-8.3.1.tar.gz  my-D8/

$ tar -zx -f drupal-8.3.1.tar.gz -C my-D8

$ ls my-D8/drupal-8.3.1/
autoload.php  composer.json  ...

$ cd my-D8/

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        drupal-8.3.1/

nothing added to commit but untracked files present (use "git add" to track)

アーカイブファイルとディレクトリをリポジトリの適切な場所に簡単に抽出するにはどうすればよいですか?

$ tar --version
tar (GNU tar) 1.29

ベストアンサー1

マニュアルから:

 -C DIR
       change to directory DIR

これにより、プロセスの作業ディレクトリが変更されますtar。たとえば、アーカイブからファイル名の最初のコンポーネントを--strip削除することもできます。drupal-8.3.1/したがって、次のことができます。

tar --strip=1 -zx -f drupal-8.3.1.tar.gz -C my-d8

tar持っていない場合は、--strip少なくとも以下が必要です--transform

tar --transform 's_drupal-8.3.1/__' -zx -f drupal-8.3.1.tar.gz -C my-d8

おすすめ記事