다른 파일을 덮어쓰지 않고 "/usr" 디렉토리에 파일을 추출하는 방법은 무엇입니까?

다른 파일을 덮어쓰지 않고 "/usr" 디렉토리에 파일을 추출하는 방법은 무엇입니까?

설치 패키지를 다운로드하여 swift홈 디렉터리에 추출합니다.

# tar -C / -xvf swift-2.2.1-RELEASE-ubuntu14.04.tar.gz
swift-2.2.1-RELEASE-ubuntu14.04/usr/
swift-2.2.1-RELEASE-ubuntu14.04/usr/include/
swift-2.2.1-RELEASE-ubuntu14.04/usr/include/lldb/
......

최종 swift-2.2.1-RELEASE-ubuntu14.04레이아웃은 다음과 같습니다.

# tree -d -L 2
.
└── usr
    ├── bin
    ├── include
    ├── lib
    └── share

5 directories

/usr다른 파일을 덮어쓰지 않고 디렉터리 에 직접 파일을 추출하고 싶은데 , 방법이 있나요?

답변1

운영 체제의 패키지 관리자와 통합된 공급업체 제공 패키지가 아닌 이상 이 위치에 압축을 풀어서는 안 됩니다. 로 가주세요/선택하다예를 들어 거기에서 추출하고 위와 같이 환경 변수를 설정하십시오.다운로드 페이지스위프트의 경우. 다음을 통해 전체 추출을 수행합니다./선택하다, 타사 애플리케이션용인 경우 환경 변수를 변경하여 버전을 빠르게 전환할 수도 있습니다.

답변2

파일을 추출할 때 tar가 추출된 파일이 이미 존재한다는 것을 발견하면 일반적으로 하드 링크나 심볼릭 링크가 있는지 혼동을 방지하기 위해 파일을 추출하기 전에 삭제하여 파일을 대체합니다. (기존 파일이 심볼릭 링크인 경우 추적되지 않고 삭제됩니다.) 그러나 디렉토리가 비어 있지 않아 삭제할 수 없는 경우 tar는 일반적으로 해당 메타데이터(소유권, 권한 등)를 덮어씁니다. 이 --overwrite-dir옵션을 사용하면 이 기본 동작이 활성화됩니다. 보다 주의 깊게 해당 디렉터리의 메타데이터를 보존하려면 이 --no-overwrite-dir옵션을 사용하십시오.

보다 주의 깊게 기존 파일이 교체되는 것을 방지하려면 이 --keep-old-files (-k)옵션을 사용하십시오. 이는 tar가 기존 파일을 대체하거나 업데이트하는 것을 거부하게 만듭니다. 즉, 아카이브 구성원과 동일한 이름을 가진 파일은 아카이브 구성원이 추출되는 것을 방지합니다. 대신 오류를 보고합니다. 예를 들어:

$ ls
blues
$ tar -x -k -f archive.tar
tar: blues: Cannot open: File exists
tar: Exiting with failure status due to previous errors

관련 정보