와 같은 압축 파일이 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
이것을 할 수 있습니까?
- 나는 아카이브 안에 무엇이 있는지 모른다. 폴더 일 수도 있고 많은 파일 일 수도 있습니다.
- 타르가 할 수 없다면 다른 도구를 사용해도 괜찮습니다.
- 스크립트로 바꿀 수있는 더 긴 양식으로 괜찮을 것입니다.
편집
그 동안 나는 일을 끝내는 것처럼 보이는 스크립트를 스스로 해킹했다. (아래에 게시 된 답변 참조). 개선 될 수 있다면 의견 / 추가 답변을 자유롭게 게시하십시오. 가장 중요한 것은 다음과 같은 단일 라이너로 패키지 가능해야한다는 것입니다.
extract <file>
답변
를 사용하면 (또는 )를 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 %. *} # 마지막 접미사 제거 NAME = $ {STRIP % .tar} #strip .tar 접미사 (있는 경우) tar -xf "$ 1"--xform = "s | ^ | $ NAME / | S"#run 명령
답변
글쎄, 당신은 적어도 몇 단계로 그것을 할 수 있습니다. 네가했다면
mkdir <archive name>
tar -xf <archive name>.tar.gz --strip-components=1 -C <archive name>
아직 더 간단한 답변이있을 수 있지만 그 작업을 수행 할 것입니다.
답변
편집하다
허용되는 답변은 아래보다 짧습니다. (같은 작업을 수행하지만 일반적으로 짧을수록 좋습니다.)
나는 결국 작업에 대한 스크립트를 해킹했다. .tar .tar.gz 및 .gz와 함께 작동합니다.
#!/bin/sh
#usage:
# nameOfScript myArchive.tar.gz
# nameOfScript myArchive.gz
# nameOfScript myArchive.tar
#
# Result:
# myArchive //folder
fileName="${1%.*}" #extracted filename
#handle the case of archive.tar.gz
trailingExtension="${fileName##*.}"
if [ "$trailingExtension" == "tar" ]
then
fileName="${fileName%.*}" #remove trailing tar.
fi
mkdir "$fileName"
tar -xf "$1" --strip-components=0 -C "$fileName"
용법:
nameOfScript archive.tar.gz
ls
archive
cd archive
ls
<archive content>
이 솔루션은 파일 이름에 점을 표시 할 수 있습니다. 예 : Eclipse-4.5M-SDK.tar.gz.
스크립트를 git repo에 보관합니다. 최신 버전은 https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here를 참조하십시오.
답변
하나 더 가능한 해결책은 --transform
옵션을 사용하는 것입니다.
tar -xzf ARCHIVE_NAME.tgz --transform="s/OLD_DIR_NAME/ARCHIVE_NAME/"
파일로 :
tar -xzf myArchive123.tar.gz --transform="s/helloWorld/myArchive123/"