tar 아카이브를 생성하고 아카이브 내의 루트 디렉터리 이름을 바꾸려고 합니다. 예를 들어 다음 파일이 있습니다.
$ tree ./repo
./repo
├── 1
├── 2
└── 3
0 directories, 3 files
repo-v1.0.0.tar.gz
다음 파일 구조로 아카이브를 생성하고 싶습니다 .
./repo-v1.0.0
├── 1
├── 2
└── 3
이제 추악한 해결 방법을 사용하고 있습니다.
mv "${repo}" ${repo}-${version}"
tar -cvzf "${repo}-${version}.tar.gz" "${repo}-${version}"
mv "${repo}-${version}" "${repo}"
명령 자체를 사용하여 아카이브의 루트 디렉토리 이름을 바꿀 수 있습니까 tar
?
답변1
tar
선택 이 있습니다 --transform
. 전화해도됩니다
tar --transform "s/repo/repo-v1.0.0/" -cvzf repo.tar.gz repo/
답변2
내가 아는 한 Tar는 이름을 바꾸지 않습니다. 그러나 심볼릭 링크를 사용하면 더 간단한 해결 방법을 수행할 수 있습니다.
ln -s "${repo}" ${repo}-${version}"
tar --dereference -cvzf "${repo}-${version}.tar.gz" "${repo}-${version}"
그런 다음 심볼릭 링크를 유지할지 아니면 삭제할지 결정할 수 있습니다.