설치된 소프트웨어의 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
실수로 어떤 일이 발생하기 전에 해당 디렉터리를 마운트 해제해야 합니다. 보다이러한 경고.