이것이 내 파일 구조입니다. 나는 현재 test2/
디렉터리에 있으며 모든 명령은 여기에서 실행되어야 합니다.
test/
|_test2/
publish/
|_subfolder1/
|_f1
|_f2
|_f3
|_subfolder2/
|_f4
|_f5
|_f6
|_f7
다음을 수행해야 합니다.
- 하위 폴더 2(동일 이름)의 tar.gz 생성
- 하위 폴더 2 삭제
- 하위 폴더 2.tar.gz를 포함하여 하위 폴더 1(동일한 이름)의 tar.gz를 생성합니다.
- 하위 폴더 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
로 변경합니다 : . 디렉토리 자체를 아카이브하려면 상위 디렉토리를 및 : 으로 변경하십시오 .foo
tar
-C /some/dir/foo .
foo
foo
tar
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/