Tar

將 tar 存檔解壓縮到 git-bash 中的現有目錄

  • July 30, 2018

我在一個名為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
...

Google搜尋,我找到了這個AskUbuntu 答案,但是當我嘗試它時,它並沒有完全達到目的:

$ 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

它沒有覆蓋 repo 根目錄中的文件,而是簡單地將子目錄放在 repo 中:

$ 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

從手冊:

-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

引用自:https://unix.stackexchange.com/questions/360033