[완료] tar 압축시, Full Name Path 를 입력한(절대경로) 압축 파일을 상대 경로로 바꾸기

sshey의 이미지

이해를 돕기위해 이미지를 하나 만들어봤습니다.

$ 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: 
첨부파일 크기
Image icon path.JPG4.37 KB
bushi의 이미지

풀고 싶은 디렉토리에 풀되, 경로 중 일부는 날려버리고 싶다.

man tar wrote:

...
-C, --directory DIR
change to directory DIR
...
--strip-components NUMBER, --strip-path NUMBER
strip NUMBER of leading components from file names before
extraction

(1) tar-1.14 uses --strip-path, tar-1.14.90+ uses --strip-compo-
nents
...

OTL

sshey의 이미지

원하는 폴더에 압축을 푸는것 아닌가요?

---- 풀고 싶은 디렉토리에 풀되, 경로 중 일부는 날려버리고 싶다.

제대로 이해해 주신것 같은데...

--strip-components 를 말씀하시고 싶으신건가요?

아니면 -C 도 되는건가요? 저는 보통 -C는

$ tar xvf test.tar -C /root 이런식으로 사용하걸랑요?

그럼 제거 원하는 경로 중 일부를 날려버리는건 아무런 소용이 없잖아요?;;;

다시 한번만 말씀해주세요.... 부탁드립니다.

gg

bushi의 이미지

aaa/bbb/ccc/contents/ 로 상대경로가 잡혀서 묶인 놈들을 /root/naver/contents/ 에 풀어놓으면 되는거잖아요 ?

cd 하시는 거 굉장히 귀찮아하시니 -C 옵션으로 풀릴 디렉토리 지정하고,
아카이브에 있는 파일들의 경로중 앞에서 4개까지 자르면 되겠지요 ?

tar -xf contents.tgz -C /root/naver/contents --strip-components=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 등을
어떻게 처리해줄건지를 정하는 옵션이고, 자세한 것은 맨페이지를 참고하시기 바랍니다.

sshey의 이미지

제발 같이 고민해주세요..;;

참고로 저의 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

김일영의 이미지

제 답글은 보셨는지요?

웬지 뭔가 낚인듯한 이 찜찜한 기분은 뭐죠;;;

sshey의 이미지

[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

sshey의 이미지

드뎌 해결했습니다...

완전....조금 더 삽질을 했으면 빨리 찾았을것을....

$ 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가 짱임니다;;;

sshey의 이미지

이렇게 자세하게 설명해주시다닛. 정말 감사합니다. 하핫

gg

guguri81의 이미지

저도 동일하게 써야 될 상황이 발생해서,
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/

^^ 혹시 사용하시는분들 있으시면 도움 되길 바랍니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.