tar를 만들 때 파일을 하위 디렉터리에 넣습니다.

tar를 만들 때 파일을 하위 디렉터리에 넣습니다.

tar 파일을 만들려고 합니다. tarred가 필요한 폴더가 2개 있습니다. 내 질문을 명확히하겠습니다.

folder 1. /temp1
folder 2. /temp1

이제 내 tar 출력이 다음과 같기를 원합니다. 압축을 풀면 다음과 같은 결과가 나옵니다.

 /temp1/* (stuff of temp1)
 /temp1/temp2/* (temp2 and subdirectories inside temp1).

이제 temp2를 temp1에 복사한 다음 압축합니다. 누군가 내가 이러한 내용을 복사할 필요가 없는 방식으로 이를 수행하도록 제안할 수 있습니까? 마치 중간에 프로세스를 종료하는 것처럼 temp2의 일부 내용을 temp1에 남겨 둘 것입니다.

답변1

temp2를 temp1에 Symlink로 연결하고 tar에게 -hor 옵션을 사용하여 --dereference심볼릭 링크를 역참조(따르기)하도록 지시합니다.

예를 들어

cd temp1
ln -s ../temp2/ .
cd ..
tar cvz -h -f example.tar.gz ./temp1
rm -f temp1/temp2

그러면 디렉토리 (예 : ) ./temp2아래에 tar 아카이브가 생성 됩니다../temp1./temp1/temp2

-h이 옵션이 GNU 확장인지 기억이 나지 않습니다 . GNU를 사용하지 않는 경우 tar사용하기 전에 주의 깊게 테스트하십시오.

temp1의 수정 타임스탬프에 관심이 있는 경우 다음을 사용하세요 touch -r.

touch -r temp1 temp1-modtime
cd temp1
ln -s ../temp2/ .
cd ..
touch -r temp1-modtime temp1
tar cvz -h -f example.tar.gz ./temp1
rm -f temp1/temp2
touch -r temp1-modtime temp1
rm -f temp1-modtime

답변2

sed가 경로 이름을 아카이브로 처리하는 동안 찾아서 바꾸는 tar의 변환 옵션을 사용하여 이 작업을 수행할 수 있습니다.

내 생각에 당신이 원하는 것은 다음과 같습니다.

tar -cf output.tar --transform 's,^temp2,temp1/temp2,' temp1 temp2

이는 로 시작하는 모든 경로와 일치 temp2하고 로 다시 작성 됩니다 temp1/temp2. 로 시작하는 모든 경로는 일치하지 않으므로 수정되지 않습니다 temp1.

답변3

몇 가지 요령으로 tar 확장을 사용하십시오. 이 같은?

$ mkdir temp3; mkdir temp3/temp1    # create another, empty temp1 dir
$ ln temp2 temp3/temp1/temp2        # link temp2 into fake temp1

그런 다음...

$ tar cf example.tar temp1      # 1st part of archive without temp2
$ cd temp3
$ tar rf ../example.tar temp1   # append temp2 as subfolder of temp1 to archive

하드 링크를 사용하면 임시 디렉토리의 기호 링크가 여전히 기호 링크로 처리될 수 있습니다. 따라서 -h가 필요하지 않습니다. 아마도 그것은 미래에 당신을 문제로부터 보호해 줄 것입니다.

--transform과 같은 추가 명령과 함께 GNU tar 확장을 볼 수도 있습니다. 또한보십시오:http://www.linuxquestions.org/questions/linux-newbie-8/tar-subdirectory-question-821074/

관련 정보