我在名为 的目录中安装了 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