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

구글링해서 이런걸 찾았어요우분투 답변 물어보기, 하지만 시도할 때 제대로 작동하지 않습니다.

$ 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

관련 정보