2010-06-01 5 views
23

예를 들어 아카이브를 압축 해제하고 싶습니다. 쉘 명령을 사용하여 "tar123.tar.gz"디렉토리/myunzip/tar123/"에 복사합니다.untar filename.tr.gz를 "filename"디렉토리에 복사하십시오.

tar -xf tar123.tar.gz는 파일을 압축 해제하지만 작업중인 디렉토리와 동일한 디렉토리에 압축을 해제합니다.

파일 이름이 "tar233.tar.gz"인 경우 /myunzip/tar233.tar.gz로 압축을 풀려면 대상 디렉토리가 파일 이름을 기반으로합니다.

tar 명령에서이를 수행 할 수 있는지 알 수 있습니까?

답변

30
강타와 GNU 타르와

:

file=tar123.tar.gz 
dir=/myunzip/${file%.tar.gz} 
mkdir -p $dir 
tar -C $dir -xzf $file 
+0

여기서 문제는 파일 이름이 무엇인지 모른다는 것이다. 버전이있는 파일이므로 오늘은 1.tar.gz 일 수 있지만 내일은 2.tar.gz 일 수 있습니다. "file = what-ever-in/home/user"라고 말하는 방법이 있습니까? – Jorre

+0

당신은 어떻게 든 그것을 알아야 할 것입니다. 정렬하면'file = $ (ls -1 $ pattern | tail -1)'과 같은 것을 사용할 수 있습니다. –

4

-C 플래그로 추출하기 전에 디렉토리를 변경할 수 있지만 디렉토리는 이미 존재해야합니다. (당신이 파일을 특정 디렉토리를 작성하는 경우, 난 강력하게 foo.tar.gz 그들을 호출에 대해 추천 -.. 확장자가 아카이브 파일입니다하지만 실제로는 디렉토리의 것을 의미한다 그 것이다 리드를 혼란)

2

시도

file=tar123.tar.gz 
dir=/myunzip/$(basename $file .tar.gz) # matter of taste and custom here 
[ -d "$dir" ] && { echo "$dir already exists" >&2; exit 1; } 
mkdir "$dir" && (gzip -d "$file | (cd "$dir" && tar xf -)) 

GNU tar를 사용하고 있다면 -C "$dir" 옵션을 주면 추출하기 전에 디렉토리로 변경됩니다. 그러나 위의 코드는 청동기 시대 타르 (tron)에서도 작동합니다.

면책 조항 : 위의 코드 중 아무 것도 테스트하지 않았습니다.

23
tar -xzvf filename.tar.gz -C destination_directory 
+1

나는'-C' 부분 만 필요로했다. 고마워! – juanmirocks

관련 문제