총 압축을 수행할 때 tar -xzvf를 사용하여 가짜 디렉터리를 제거하세요.

총 압축을 수행할 때 tar -xzvf를 사용하여 가짜 디렉터리를 제거하세요.

일부 "가짜" 선행 디렉토리가 제외되도록 압축된 타르볼의 경로를 다듬고 싶습니다. 예를 들어 설명하겠습니다.

tree명령으로 출력된 디렉토리 구조는 다음과 같습니다 .

tree /tmp/gzip-expt

/tmp/gzip-expt
├── gunzip-dir
├── gzip-dir
└── repo
    └── src-tree
        ├── l1file.txt
        └── sub-dir
            └── l2file.txt

5 directories, 2 files

나는 src-tree를 gzip-dir로 압축하고 싶었기 때문에 다음과 같이 했습니다:

cd /tmp/gzip-expt/gzip-dir
tar -czvf file.tar.gz /tmp/gzip-expt/repo/src-tree

그런 다음 gunzip-dir에 file.tar.gz를 gunzip합니다. 다음과 같이 했습니다.

cd /tmp/gzip-expt/gunzip-dir
tar -xzvf /tmp/gzip-expt/gzip-dir/file.tar.gz

tree /tmp/gzip-expt/gunzip-dir다음 출력이 표시됩니다.

/tmp/gzip-expt/gunzip-dir
└── tmp
    └── gzip-expt
        └── repo
            └── src-tree
                ├── l1file.txt
                └── sub-dir
                    └── l2file.txt

tree /tmp/gzip-expt/gunzip-dir그러나 다음 출력을 표시 하고 싶습니다 .

/tmp/gzip-expt/gunzip-dir
└── src-tree
    ├── l1file.txt
    └── sub-dir
        └── l2file.txt

즉, 경로의 "가짜" tmp/gzip-expt/repo 부분을 보고 싶지 않습니다.

답변1

그것들은 가짜가 아니며 단지 저장하라는 지시를 정확히 저장합니다.

특히, path 가 주어지면 /tmp/gzip-expt/repo/src-tree경로 의 어느 부분을 유지해야 하는지, 파일을 로 저장해야 하는지 /tmp/gzip-expt/repo/src-tree/l1file.txtsrc-tree/l1file.txt을 알 수 없습니다. l1file.txt아카이브에 추출 시 생성되는 선행 디렉토리가 있는 경우 tarball을 추출할 때 다릅니다. 그렇지 않다면 그렇지 않습니다.

상대 경로를 제공 tar하고 상대 경로가 작동하려면 올바른 디렉터리에서 실행되도록 합니다.

cd /tmp/gzip-expt/repo
tar -czvf /tmp/gzip-expt/gzip-dir/file.tar.gz ./src-tree

또는

cd /tmp/gzip-expt/gzip-dir
tar -C /tmp/gzip-expt/repo -czvf file.tar.gz ./src-tree

GNU 매뉴얼 페이지에서는 다음을 설명합니다 -C.

-C, --directory=DIR 작업을 수행하기 전에 DIR로 변경하십시오. 이 옵션은 순서를 구분합니다. 즉, 모든 후속 옵션에 영향을 미칩니다.

-f그러나 내가 아는 한, 먼저 제공되더라도 해당 파일은 시작된 디렉터리에서 계속 사용 됩니다.tar-C

추출할 때 이를 수정하려면 최소한 GNU tar는 파일 이름의 앞 부분을 제거하라고 지시합니다. 예를 들어 를 사용하면 유사한 파일 이름이 .--strip-components=N--strip-components=2/tmp/gzip-expt/repo/src-tree/...repo/src-tree/...

관련 정보