압축을 풀 때 tarball의 최상위 폴더 이름을 바꾸는 방법은 무엇입니까?

압축을 풀 때 tarball의 최상위 폴더 이름을 바꾸는 방법은 무엇입니까?

라는 폴더가 포함된 tar.gz 아카이브가 있는 경우 <somename>-<somenumber>이를 폴더로 추출하려면 어떻게 해야 합니까 <somename>?

예를 들어, 파일에는 somearchive.tar.gz최상위 폴더가 포함되어 somearchive-0.1.2있으며 다음과 같이 시도했습니다.

tar xvfz somearchive.tar.gz --transform s/[a-zA-Z]+\-[0-9\.]+/somearchive/

하지만 이렇게 하면 기본 폴더에 추출됩니다.

답변1

Steeldriver가 지적했듯이 tar --transform확장 정규식 구문이 아닌 기본 정규식 구문을 사용하는 sed 대체 표현식이 필요합니다. 특히 "하나 이상의" 연산자는 가 \+아니라 입니다 +. 바라보다 내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?

tar xvfz somearchive.tar.gz --transform 's/^[a-zA-Z]\+-[0-9.]\+/somearchive/'

아니면 그냥 이렇게 해도 됩니다

tar xvfz somearchive.tar.gz --transform 's!^[^/]*!somearchive!'

답변2

Giles의 답변은 내 질문과 정확히 일치합니다. 그러나 나는 또한 다음과 같은 대안을 찾았습니다.

mkdir somearchive
tar xvfz somearchive.tar.gz --strip 1 -C somearchive

관련 정보