변수를 통해 tar에 디렉토리 이름을 자동으로 저장합니다.

변수를 통해 tar에 디렉토리 이름을 자동으로 저장합니다.

저는 디렉토리가 하나만 포함된 tarball을 다운로드했습니다. 이 디렉토리의 이름은 매우 깁니다.

tarball에서 추출한 후 디렉토리 이름을 변경하고 싶지만 and를 mkdir사용하는 것보다 다른 방법을 선호합니다 .strip-components 1-C

나는 그것에 대해 생각했지만 , 명령 대체가 출력을 저장하는 데 도움이 될 수 있다고 생각하기 mv전에 디렉토리 이름을 변수에 자동으로 저장하는 것을 선호했습니다.
형태는디렉토리 이름이지만 어떻게 tarball(또는 특정 디렉토리)에서만 이름을 선택할 수 있는지 알 수 없습니다.

명령 대체는 어떻게 가능합니까? 그렇지 않다면 대안은 무엇입니까?

답변1

귀하의 질문을 올바르게 이해했는지 잘 모르겠지만 다음과 같은 것을 찾고 있다고 생각합니다.

$ dir="$(tar tf archive.tar | cut -d / -f1 | uniq)"
$ echo "$dir"
tar-very-long-nime-very-very-long

답변2

다음은 현재 디렉터리의 아카이브로 작업하고 있다고 가정합니다.

tar -x -f "$archivedir.tar"
mv "$archivedir" new-name

이는 변수에 접미사 없는 아카이브 이름이 포함되어 있고 $archivedir이 이름이 아카이브가 추출될 때 생성될 디렉터리의 이름이기도하다고 가정합니다.tar.tar

아카이브를 추출하고 생성된 디렉터리의 이름을 바꿉니다.

tar아카이브의 파일 이름이 있고 $tararchive파일 이름 접미사가 .tar​​( 값에 포함됨 $tararchive)인 경우:

tar -x -f "$tararchive"
mv "$(basename "$tararchive" .tar)" new-name

"$(basename "$tararchive" .tar)"비트는 로 대체될 수 있습니다 "${tararchive%.tar}".

답변3

GNU tar를 사용하면 sed와 유사한 표현식을 사용하여 파일 이름을 변환할 수 있습니다.

tar -xf archive.tar.gz --xform='s,^very_long_name,short,'

더 읽어보세요여기.

관련 정보