TAR 패키지 목록에서 각 RPM 파일을 추출하고 해당 파일에서 패키지 정보를 얻기 위한 최상의 시간별 솔루션을 알고 싶습니다.
따라서 적어도 하나의 RPM을 포함하는 디렉토리에 tarball 목록이 있습니다. 이를 위해 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-command
옵션을 사용하여 각 파일의 내용을 rpm
명령으로 보낼 수 있습니다.
tar -zf tarball.gz --wildcards --extract '*.rpm' --to-command='rpm -qp /dev/stdin'
~에서수동:
--to-command=command
파일을 추출하고 해당 내용을 표준 입력으로 파이프합니다.주문하다. 이 옵션을 사용하면 tar는 지정된 파일을 생성하지 않고 대신 다음을 호출합니다.주문하다파일 내용을 표준 출력으로 파이프합니다. 이것주문하다명령줄 인수가 포함될 수 있습니다(자세한 내용은 외부 명령 실행 참조).
참고하세요주문하다추출된 각 일반 파일에 대해 한 번씩 실행됩니다. 이 옵션을 사용하면 비정규 파일(디렉토리 등)은 무시됩니다.