将 tar 存档解压到 git-bash 中的现有目录

将 tar 存档解压到 git-bash 中的现有目录

我在名为 的目录中安装了 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命令,但在我的 shell 中,它拒绝覆盖现有的非空子目录。

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

谷歌搜索,我发现了这个询问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

相关内容