저는 디렉토리가 하나만 포함된 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,'
더 읽어보세요여기.