Tar 역참조는 1레벨만 가능

Tar 역참조는 1레벨만 가능

설치된 소프트웨어의 TAR을 생성하기 위해 다음 의사 스크립트를 사용합니다.

mkdir tmp
ln -s /path/to/app1/bin              tmp/app1
ln -s /and/path/going/to/the-app-2   tmp/app2
tar -c --dereference -f apps.tar tmp

--dereference방금 만든 링크를 따라가려면 여기에 옵션이 필요합니다 tmp. 처음에 링크를 만드는 이유는 파일 시스템에 있는 것과 다른 이름으로 디렉토리를 아카이브에 저장하기 위해서입니다.

지금까지는 잘 작동했습니다. 그러나 이제 /path/to/app1링크도 포함되어 있고 팔로우하고 싶지 않은 상황이 발생했습니다.

명령 을 일부 변경하면 이것이 가능합니까 tar? 아니면 아카이브 구축 방식을 완전히 바꿔야 합니까?

답변1

부분적으로 역참조할 수 있는 방법은 없다고 생각합니다. 당신은 다음과 같은 것을 할 수 있습니다

tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2

그런 다음 -C를 사용하여 다른 루트로 추출합니다.

-C, --디렉토리=디렉터리

         change to directory DIR

예를 들어

mkdir tmp
tar -C tmp -xf apps.tar

이는 현재 아카이브를 생성하는 방식과 비슷한 효과를 갖습니다.

-C를 사용하여 기존 디렉터리를 가리킬 수도 있습니다.

답변2

실제로 tarball의 디렉토리 구조가 디스크의 디렉토리 구조와 달라야 합니까?

그렇지 않은 경우에는 그대로 tar하면 됩니다.

tar -cf file.tar /path/1 /path/2

답변3

링크하는 대신 복사할 수 있었습니다. 불행하게도 오버헤드가 더 추가됩니다(파일이 다소 큼). 물론 타르링 자체도 복사의 한 형태이기 때문에 크기는 최대 두 배까지 커질 것입니다.

답변4

그렇다면 root가장 좋은 방법은 mount의 바인드 명령을 사용하여 기본적으로 tar하려는 디렉토리를 심볼릭 링크하는 대신 하드 링크하는 것입니다. 그러면 역참조 옵션을 사용할 필요가 없습니다.

mkdir tmp
mount --bind /path/to/app-1 tmp/app-1
mount --bind /path/to/app-2 tmp/app-2
tar cf apps.tar tmp

실수로 어떤 일이 발생하기 전에 해당 디렉터리를 마운트 해제해야 합니다. 보다이러한 경고.

관련 정보