2013-08-01 2 views
3

경로에서 마지막 디렉토리 만 tar 파일로 압축 할 수 있습니까?경로에서 마지막 디렉토리 만 tar 파일로 압축 할 수 있습니까?

tar czf my_arch.tar.gz -C /usr/local/files/dir1 . 

내가 스스로하지 않고, DIR1 카탈로그의 봉쇄를 얻을 : 나는 명령을 실행하면 예를 들어, 나는 여러 경로

/usr/local/files/dir1/ 

    file1.txt 
    file2.txt 
    file3.txt 

/usr/local/files/dir2/ 

    file3.txt 
    file4.txt 
    file5.txt 

있습니다.

그래서 나는이 - my_arch.tar.gz /은 File2.txt, file2.txt, file3.txt,하지만 내 아카이브에 같은 구조를 필요 -

my_arch.tar.gz/dir1/file1.txt, file2.txt, file3.txt 

내가 이것을 어떻게 할 수 있습니까?

감사합니다.

답변

0

내가 정확히 묻는 것을 이해한다면, tar 파일에 디렉토리가 포함되기를 원합니다.

에서와 -C 플래그를 사용하지 않고 그것을 시도 :

tar -czf my_arch.tar.gz /usr/local/files/dir1 
+0

나는 잊었다 - 나는 경로 구조를 저장할 필요가 없습니다. 마지막 폴더 제외. – tenzor

+0

"마지막 폴더"비트를보다 명확하게 설명 할 수 있습니까? ls에 나열된 마지막 폴더의 내용 만 아카이브하고 싶습니까? –

+0

@AlPacifico 나는 그가 dir1이 마지막 디렉토리라는 것을 의미한다고 생각하고, tar는 dir1/file1, file2..etc를 포함해야한다. 압축을 풀 때 dir1 디렉토리와 모든 파일을 추출해야합니다. 같은 생각을하고 있지만 찾지 못했습니다. – kiranking

1

cd /usr/local/files 
tar -cvzf my_arch.tar.gz dir1 

는 -c 지시자는 당신이 DIR1로 변경하여 폴더를 보관하지 만, 그 내용을 만들려고 :

-C, --directory DIR 
    change to directory DIR 
+0

큰 스크립트를 실행하는 동안 cd 명령을 사용하는 것은 안전하지 않습니다. – tenzor

+1

스크립트를 실행 중이라고 명시하지 않았습니다. "안전하지 않은"이유가 무엇입니까? "-C"플래그는 tar가 디렉토리로 변경되도록합니다. 존재하지 않는 디렉토리가 걱정된다면 오류 처리를 추가 할 수 있습니다.'cd/usr/local/files/dir1 || {dostuff; }' – omnibear

+1

쉘의 주 스레드에서 디렉토리를 변경하는 것에 대해 걱정이된다면 괄호를 추가하여 서브 쉘을 사용할 수도 있습니다 : '( cd/usr/local/files tar -cvzf my_arch.tar. gz dir1 )'. – omnibear

1

이 작업은 tar를 통해 직접 수행 할 수 없습니다. 여기 내 제안이다 :

#!/bin/bash 
mydir=/my_dir/whit/long_and/complicated_path/the_stuff_is_here 
dirname=$(dirname $mydir) 
basename=$(basename $mydir) 

tar cvf /tmp/$basename.tar -C $dirname $basename