동일한 기본 이름을 가진 디렉토리로 추출하려면 tar를 사용하시겠습니까?

동일한 기본 이름을 가진 디렉토리로 추출하려면 tar를 사용하시겠습니까?

예를 들어 zip 파일이 있습니다 myArchive123.tar.gz. 그 안에는 다음과 같은 폴더가 포함되어 있습니다.helloWorld

다음을 사용하여 추출 하면 tar -xf myArchive123.tar.gz:helloWorld

ls 
myArchive123.tar.gz
helloWorld 

출력이 파일 이름에서 확장자를 뺀 것과 동일해지기를 원합니다 .tar.gz. 즉:

tar <magic paramaters> myArchive123.tar.gz 
ls 
 myArchive123.tar.gz
 myArchive123
cd myArchive123
ls 
  helloWorld

이것이 가능합니까?

  • 나는 기록 보관소에 무엇이 있는지 전혀 모릅니다. 폴더일 수도 있고 여러 파일일 수도 있습니다.
  • tar가 할 수 없으면 다른 도구를 사용할 수 있습니다.
  • 스크립트로 변환할 수 있는 더 긴 형식도 괜찮습니다.

편집하다
그 동안 나는 그 일을 하는 것처럼 보이는 스크립트를 직접 작성했습니다(아래 게시된 답변 참조). 가장 중요한 것은 한 줄의 코드로 패키지되어야 한다는 것입니다. 예를 들면 다음과 같습니다.

extract <file>

답변1

$ tar -xf myArchive123.tar.gz --one-top-level

--최상위 수준[=DIR]
모든 파일을 DIR로 추출하거나, 인수 없이 사용하는 경우 아카이브의 기본 이름(--auto-compress에서 인식하는 표준 압축 접미사 빼기)을 따라 이름이 지정된 하위 디렉토리에 추출합니다.

답변2

를 사용하려면 각 파일 이름 앞에 (or)를 붙일 gnu tar수 있습니다 .--xform--transform/prefix/

tar -xf myArchive.tar.gz --xform='s|^|myArchive/|S'

/선행 이 없으며 prefix/표현식은 파일 이름 변환에서 심볼릭 링크 대상을 제외하는 것으로 끝납니다 sed. 테스트해 보세요(모의 실행).S

tar -tf myArchive.tar.gz --xform='s|^|myArchive/|S' --verbose --show-transformed-names

시작하는 데 도움이 되도록 호출할 수 있는 매우 간단한 스크립트는 다음과 같습니다 extract <file>.

STRIP=${1%.*} #마지막 접미사 제거
이름=${STRIP%.tar} #strip. 아스팔트접미사(있는 경우)
tar -xf "$1" --xform="s|^|$NAME/|S" # 명령 실행

답변3

글쎄요, 최소한 몇 단계만 거치면 가능합니다. 당신이 그렇게한다면

mkdir <archive name>
tar -xf <archive name>.tar.gz --strip-components=1 -C <archive name>

더 간결한 답변이 있을 수 있지만 이렇게 하면 작업이 완료됩니다.

답변4

--transform또 다른 가능한 해결책은 다음 옵션을 사용하는 것입니다 .

tar -xzf ARCHIVE_NAME.tgz --transform="s/OLD_DIR_NAME/ARCHIVE_NAME/"

파일로:

tar -xzf myArchive123.tar.gz --transform="s/helloWorld/myArchive123/"

관련 정보