[완료] tar 압축시, Full Name Path 를 입력한(절대경로) 압축 파일을 상대 경로로 바꾸기
글쓴이: sshey / 작성시간: 화, 2008/01/15 - 6:23오후
이해를 돕기위해 이미지를 하나 만들어봤습니다.
$ cd SeoGtk
$ tar cvf contents.tar ../root/parent/child/contents/
하면, contents.tar 파일이 생깁니다. 그춍?
$ cd ../root/naver
$ pwd
/root/naver
$ tar xvf contents.tar
하면, root/parent/child/contents/.... 의 경로 아래 contents 의 내용들이 쭈~욱 풀리자나요..
전 이게 아니라,
$ pwd
/root/naver/contents/.....
의 폴더 맵으로 압축내용이 풀리길 바랍니다.
contents 폴더 상위에서 contents 를 압축하세요. 라는 답변은 사절입니다...
그래서 어떤분이 pax 명령어를 알려주셨는데, 도무지 모르겠더군요...
매뉴얼에 나와있는대로도 해보구 그분이 알려주신대로도 해봤지만.....
root/parent/child/contents/ 이 경로가
contents/ 로 바뀌지는 않더군요....
된다는데.....어떻게 하는지....알려주세요....ㅠ.ㅠ
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 4.37 KB |
Forums:
풀고 싶은
풀고 싶은 디렉토리에 풀되, 경로 중 일부는 날려버리고 싶다.
OTL
-C 옵션은 단지..
원하는 폴더에 압축을 푸는것 아닌가요?
---- 풀고 싶은 디렉토리에 풀되, 경로 중 일부는 날려버리고 싶다.
제대로 이해해 주신것 같은데...
--strip-components 를 말씀하시고 싶으신건가요?
아니면 -C 도 되는건가요? 저는 보통 -C는
$ tar xvf test.tar -C /root 이런식으로 사용하걸랑요?
그럼 제거 원하는 경로 중 일부를 날려버리는건 아무런 소용이 없잖아요?;;;
다시 한번만 말씀해주세요.... 부탁드립니다.
gg
tar -xf test.tgz -C
aaa/bbb/ccc/contents/ 로 상대경로가 잡혀서 묶인 놈들을 /root/naver/contents/ 에 풀어놓으면 되는거잖아요 ?
cd 하시는 거 굉장히 귀찮아하시니 -C 옵션으로 풀릴 디렉토리 지정하고,
아카이브에 있는 파일들의 경로중 앞에서 4개까지 자르면 되겠지요 ?
안되면 같이 고민해보고요.
OTL
이렇게 하면
pax -r -s ',^/root/parent/child,/root/naver,' -l -p e -f a.tar
될겁니다...
',^/root/parent/child,/root/naver,'에서 ,는 old string과 new string의 구분자고
^는 행의 시작에 대한 anchor입니다. 즉 /root/parent/child로 "시작하는" 문자열을 old string으로 본다는 뜻이죠.
man pax 해보면 구분자가 마치 /인것처럼 생각할 수도 있는데
man pax의 맨 마지막 페이지까지 봐서 거기 예제를 보면서 두드려 보면
/가 아니라 ,가 구분자임을 알 수 있습니다. (예제도 좀 알아보기 힘들죠...)
저도 금방 기억이 안 나서 좀 해보고 생각났고요.
혹시 그래도 /이 영 찜찜하시면 앞에 \을 붙여서 \/으로 쓰면 됩니다.
\은 뒤에 메타 문자가 나왔을때 메타 문자 대신 글자 그대로 해석되게 해 줍니다.
그런데 이거... HP-UX에서 해봤습니다.
쿠분투에 pax를 인스톨했는데... pax 치니까 걍 뻗네요;;;
그래서 옵션의 차이는 모르겠습니다.
제대로 옵션이 먹는다면 -l 옵션은 링크가 포함되어 있을 경우 링크를 걸어주는 것이고,
-p 옵션은 포함된 파일의 user ID, group ID, access permission, access time, modification time 등을
어떻게 처리해줄건지를 정하는 옵션이고, 자세한 것은 맨페이지를 참고하시기 바랍니다.
음 알려주신 tar는 안되네요...ㅠ.ㅠ
제발 같이 고민해주세요..;;
참고로 저의 OS 는 레드헷 엔터프라이즈 4 입니다.... tar 가 리눅스계열 내에서도 특성을 탈까요...?
궁금한점이 있네요..
이거 실행해서 성공하신 명령이죠??
$tar -xf bar.tar -C ./images/ --strip-components=2
tar: unrecognized option `--strip-components=2'
Try `tar --help' for more information.
gg
???
제 답글은 보셨는지요?
웬지 뭔가 낚인듯한 이 찜찜한 기분은 뭐죠;;;
김일영님..
[root@localhost m]# pax -r -s ',^/./testDfb/src/images/bar,./images/bar,' -l -f folder.tar
pax: Invalid combination of options: -f -l -r -s
[root@localhost m]# pax -r -s ',^/./testDfb/src/images/bar,./images/bar,' -l -p e -f folder.tar
pax: Invalid combination of options: -f -l -p -r -s
[root@localhost m]# pax -r -s ',^/testDfb/src/images/bar,images/bar,' -l -p e -f folder.tar
pax: Invalid combination of options: -f -l -p -r -s
이러나 저러나...마찬가지군요...
[root@localhost m]# pax -r -s ',^/./testDfb/src/images/bar,./images/bar,' -f folder.tar
-f 만 줬을때 풀리는군요....그런데...경로는 압축된 그대로 출력 됩니다...
낚시?? 그런거 할 시간적 여유가 없네요... 야근하며 삽질 중인데...낚시질이라니요...
아무래도 님의 HP-UX 와는 뭔가 다른가 보네요.. 아...방법이 없단 말인가...ㅠ.ㅠ
메뉴얼을 알아보기 힘들어서 당췌 알길이 없네요... 오늘까지만 삽을 들고있어야겠습니다...
관심가져 주셔서 감사합니다... 방법을 찾으면 다시 올리지요...
gg
일영님 감사합니다. ^^
드뎌 해결했습니다...
완전....조금 더 삽질을 했으면 빨리 찾았을것을....
$ pax -r -s ',^testDfb/src/images/bar,images/bar,' -f folder.tar
',^/,/,' 에서 저 슬러시가 있고 없고의 차이네요....ㅋㅎ
님은 제가 쓴 root 라는 것때문에 당연히 / 를 붙여주신것 같은데...눈치를 못챘네요. ㅎㅎ
[OS] Redhat Enterprise 4 updates 3
[usage] $ pax -r -s ',^ __없앨 경로들___ , __원하는 경로들___ ,' -f 파일.tar
---> 없앨 경로 : 이미 압축 파일에 포함되어있는 없애고 픈 경로들
---> 원하는 경로 : 압축 파일에 있지만, 압축 해제와 동시에 새로운 경로로 풀리기를 바라는 경로(?);;
원하는 경로는 타겟 경로가 아님... tar 의 -C 옵션 아님.
[목적] 압축시 필요 없는 경로(절대경로)를 없애고, 원하는 경로에 압축 해제 하기 위함
[완료] 하핫 감사합니다. ^^
gg
답을 구하셨다니 다행입니다
예... 우선 축하(?)드리고요...
제가 애당초 그냥 root가 아니라 /root라고 쓴 것은,
경로가 그렇게 묶인 경우만 풀 때 절대 경로로 풀리기 때문입니다.
즉 /root/parent/child/contents/가 아니라 root/parent/child/contents/로 되어 있었다면,
/root/naver 밑에 갖다 두고 풀었을때
절대 경로 /root/parent/child/contents/에 풀리는건 아니고
/root/naver/root/parent/child/contents/로 풀리게 될 겁니다.
root/parent/child/contents/.... 의 경로 아래 contents 의 내용들이 쭈~욱 풀리자나요..
라고 앞서 적어주셨는데 그걸 보고 /root/parent/child/contents/에 풀린다는 의미로 접수했었습니다.
애당초 상대 경로로 풀리는 경우라면 문제가 될 것이 없다고 생각을 했었거든요.
보통의 경우는 상대 경로로 풀 수만 있다면 다 푼 다음에 mv 해도 별 문제가 되지 않으니...
그래서 절대 경로로 묶인 tarball이라서 문제가 되는 상황인줄 알았지요.
사실 처음에 질문을 올리셨을때부터 그런 문제인줄로 알았기 때문에,
HP-UX가 아닌 Linux에 있는 GNU tar는 특별히 지정을 하지 않는한 절대 경로로 묶지 않고 상대 경로로 묶던데
애당초 왜 그런 문제가 있는 tarball이 생겼을까라고 의아해 하던 참이었습니다.
여하튼, 잘 해결되어서 다행이네요~
p.s) 제가 윗 글에서 old string, new string이라고 적었는데...
tar tf tarball파일 해보면 tarball파일에 묶인 파일 각각의 원래 경로들이 쭉 나오는데
어쨌든 지금은 잘 아시겠지만 그 경로 문자열들에서 old string을 찾아서 new string으로 치환하면서 풀게 된다는 의미입니다.
그것까지 설명해드렸으면 좀 더 수고를 덜으셨을건데 그랬네요.
p.s) 제가 pax를 몰라서 헤맸을때 tar -C도 찾아봤었는데, 단순히 cd 명령어를 수행하는거랑 동일한 것 같습니다.
--strip-components도 시도를 해 봤었지만 저도 사용하는 법을 잘 모르겠더군요.
여하튼 pax가 짱임니다;;;
거듭 감사드립니다. ^^
이렇게 자세하게 설명해주시다닛. 정말 감사합니다. 하핫
gg
[공유] strip 사용
저도 동일하게 써야 될 상황이 발생해서,
tar strip 테스트 해보니 잘 동작하네요.
원본 압축 파일 경로
./apache-tomcat-6.0.29/*
* strip 지정 안하고 압축 해제한 경우
tar xvzf /usr/local/apache-tomcat-6.0.29.tgz -C /usr/local/tomcat/
-> /usr/local/tomcat/apache-tomcat-6.0.29/
* strip 지정 하고 압축 해제한 경우
tar xvzf /usr/local/apache-tomcat-6.0.29.tgz -C /usr/local/tomcat/ --strip 2
-> /usr/local/tomcat/
^^ 혹시 사용하시는분들 있으시면 도움 되길 바랍니다.
댓글 달기