각각 다른 TAR 파일에 번들로 포함된 여러 RPM 파일을 검사(rpm -qp)합니다.

각각 다른 TAR 파일에 번들로 포함된 여러 RPM 파일을 검사(rpm -qp)합니다.

TAR 번들 목록에서 각 RPM 파일을 추출하고 해당 파일에서 패키지 정보를 얻는 가장 좋은 경우 솔루션이 무엇인지 궁금합니다.

따라서 적어도 하나의 RPM을 포함하는 tar 번들 목록이 디렉토리에 있습니다. 이를 위해 bash 스크립트를 사용하여 루프 오버, 추출 및 각 RPM 패키지에 정점을 찍는 가장 간단한 솔루션을 시도했습니다. 이는 TAR 번들이 20개 이상이면 상당한 시간이 걸립니다.

또한 를 사용하여 대량 추출을 시도한 cat *.tar | tar -xvf - -i다음 rpm -qp #list of files마지막 접근 방식보다 개선된 패키지 이름을 얻었습니다.

TAR 번들을 들여다보면 .rpm 파일명을 알 수 있는 것으로 알고 있지만, 패키지가 포함된 파일 이름은 패키지 이름과 아무 관련이 없기 때문에 RPM 패키지도 확인해야 합니다.

내가 시도할 수 있는 가장 가까운 해결책은 다음과 같습니다.

# given tarball-containing-wget-rpm-package.tar.gz contains wget.rpm 

bash$ time (cat tarball-containing-wget-rpm-package.tar.gz|gunzip|tar --wildcards --extract '*.rpm' --to-stdout|rpm -qp /dev/stdin)
wget-1.11.4-1.40.1

real    0m0.049s
user    0m0.044s
sys     0m0.004s

이는 매우 빠르지만 TAR 번들에 둘 이상의 RPM 파일이 포함된 경우 올바른 정보를 제공하지 않습니다.

그래서 제가 묻는 것은 다음과 같습니다.

  • 모든 TAR 파일을 stdout으로 대량 추출하고 RPM 파일을 엿볼 수 있습니까?
  • TAR 번들에서 파일을 추출하지 않고 이 작업을 수행할 수 있습니까?
  • 여러 RPM이 포함된 단일 TAR 번들을 사용하려면 위 명령을 어떻게 수정해야 합니까?

답변1

rpm명령이 하나의 파일을 올바르게 처리할 수 stdin있고 관련된 여러 파일이 있는 경우 실패한다는 점을 고려하면 다음 접근 방식이 잠재적인 해결책입니다.

GNU를 사용하면 옵션을 사용하여 각 파일의 내용을 명령으로 보낼 tar수 있습니다 .--to-commandrpm

tar -zf tarball.gz --wildcards --extract '*.rpm' --to-command='rpm -qp /dev/stdin'

로부터수동:

--to-command=command

파일을 추출하고 해당 내용을 표준 입력으로 파이프합니다.명령. 이 옵션을 사용하면 지정된 파일을 생성하는 대신 tar가 다음을 호출합니다.명령파일 내용을 표준 출력으로 파이프합니다. 그만큼명령명령줄 인수가 포함될 수 있습니다(자세한 내용은 외부 명령 실행 참조).

그것을주의해라명령추출된 각 일반 파일에 대해 한 번씩 실행됩니다. 이 옵션을 사용하면 비정규 파일(디렉토리 등)은 무시됩니다.

관련 정보