다른 디렉터리에서 tar.gz 파일을 만듭니다. tar는 파일을 특정 디렉터리 구조에 유지해야 합니다.

다른 디렉터리에서 tar.gz 파일을 만듭니다. tar는 파일을 특정 디렉터리 구조에 유지해야 합니다.

이것이 내 파일 구조입니다. 나는 현재 test2/디렉터리에 있으며 모든 명령은 여기에서 실행되어야 합니다.

test/
  |_test2/
publish/
  |_subfolder1/
      |_f1
      |_f2
      |_f3
      |_subfolder2/
          |_f4
          |_f5
          |_f6
          |_f7

다음을 수행해야 합니다.

  1. 하위 폴더 2(동일 이름)의 tar.gz 생성
  2. 하위 폴더 2 삭제
  3. 하위 폴더 2.tar.gz를 포함하여 하위 폴더 1(동일한 이름)의 tar.gz를 생성합니다.
  4. 하위 폴더 1 삭제

최종 tar 구조는 다음과 같아야합니다

publish/
  |_subfolder1.tar.gz
      |_subfolder2.tar.gz

현재 경로에서 각 tar.gz의 압축을 풀면 출력은 다음과 같아야 합니다.

publish/
  |_subfolder1.tar.gz
  |_subfolder1/
      |_f1
      |_f2
      |_f3
      |_subfolder2.tar.gz
      |_subfolder2/
          |_f4
          |_f5
          |_f6
          |_f7

다음을 수행하여 이를 달성할 수 있습니다.

cd ../../publish/subfolder1
tar -zxf subfolder2.tar.gz subfolder2/
rm -rf subfolder2
cd ../
tar -zxf subfolder1.tar.gz subfolder1/
rm -rf subfolder1
cd ../test/test2

나는 내 스크립트가 cd.

tar -zcf ../../publish/subfolder1/subfolder2.tar.gz -C ../../publish/subfolder1/subfolder2/ .
rm -rf ../../publish/subfolder1/subfolder2/
tar -zcf ../../publish/subfolder1.tar.gz -C ../../publish/subfolder1/ .
rm -rf ../../publish/subfolder1/

이렇게 하면 tarball이 생성되지만 디렉터리는 삭제됩니다. 포장을 풀면 다음이 표시됩니다.

publish/
  |_subfolder1.tar.gz
  |_subfolder2.tar.gz
  |_f1
  |_f2
  |_f3 
  |_f4
  |_f5
  |_f6
  |_f7

여러 cd 명령을 사용하지 않고 tarball 구조에서 폴더 경로를 어떻게 유지할 수 있습니까?

답변1

보관하려면콘텐츠, 현재 디렉터리 foo로 변경합니다 : . 디렉토리 자체를 아카이브하려면 상위 디렉토리를 및 : 으로 변경하십시오 .footar-C /some/dir/foo .foofootar foo-C /some/dir foo

따라서 명령은 다음과 같습니다.

tar -zcf ../../publish/subfolder1/subfolder2.tar.gz -C ../../publish/subfolder1 subfolder2
rm -rf ../../publish/subfolder1/subfolder2/
tar -zcf ../../publish/subfolder1.tar.gz -C ../../publish subfolder1
rm -rf ../../publish/subfolder1/

관련 정보