이전 서버의 일부 데이터를 새 서버에 설치하고 있습니다.
저는 수년 동안 오래된 서버를 사용해왔기 때문에 많은 레거시 데이터를 갖고 있으며, 특히 레거시 사용자 및 그룹 이름이 가장 많습니다.
추출할 때 tar는 식별자를 대체 수단으로 사용하거나 현재 사용자를 최후의 수단으로 사용하여 사용자 및 그룹 정보를 이름별로 일치시키는 데 최선을 다합니다.
제가 하고 싶은 일은 추출하기 전에 모든 사용자와 그룹이 존재하는지 확인하는 것입니다. 이렇게 하면 모든 파일이 올바른 ID를 얻게 됩니다.
제가 생각할 수 있는 가장 좋은 방법은 tar 파일에 있는 모든 사용자 및 그룹 이름을 나열하는 것입니다. 해당 명령을 사용하여 모든 파일을 나열할 수 있다는 것을 알고 있지만 tar tvf backup.tar
올바른 두 이름을 추출하는 방법을 찾아야 합니다.
이 옵션을 사용하는 것보다 더 쉬운 방법이 있는지 궁금합니다 tv
. 일부 도구나 명령줄 옵션은 사용자 이름과 그룹 이름만 추출하므로 이를 사용하여 sort -u
목록을 고유한 항목으로 좁힐 수 있습니다.
그런 기능 아시는 분 계신가요?
답변1
흥미로운 질문입니다. 매뉴얼 페이지를 잠깐 살펴보면("user"를 검색하고 결과가 나오지 않으면 "owner"를 검색) 다음을 수행해야 합니다.
tar xf thetarball.tgz --to-command='sh -c "echo $TAR_UNAME $TAR_GNAME"' | sort | uniq -c
분명히 필요에 맞게 스크립트를 변경하십시오. 일부 사용 사례에서는 이름 대신 $TAR_UID
및가 필요할 수 있습니다 .$TAR_GID
--owner-map
또한 및 에 --group-map
대한 옵션을 읽어보는 것이 좋습니다 tar
. 모든 사용자와 그룹을 미리 만드는 것보다 사용 사례에 큰 도움이 될 수 있고 훨씬 간단할 것 같습니다.
답변2
빠른 조립:
그룹:
tar tvf thetarball.tgz | awk '{print $2}' | cut -d/ -f2 | sort -u
사용자:
tar tvf thetarball.tgz | awk '{print $2}' | cut -d/ -f1 | sort -u
사용자/그룹 쌍:
tar tvf thetarball.tgz | awk '{print $2}' | sort -u