Extrai um único diretório do rpm

0

Eu posso extrair o arquivo individual rpm rpm por:

rpm2cpio rpm_name | cpio -ivd ./a/b/c/README

Eu preciso extrair todo o diretório / a / b / c / (usando ./a/b/c/ no comando acima não funciona)?

  1. Como isso pode ser feito?
  2. Posso indicar onde criar o diretório "c /" em vez de ./a/b/c?
por dimba 20.11.2012 / 09:28

1 resposta

2
  1. use um curinga, mas tenha cuidado para protegê-lo do shell:

    rpm2cpio rpm_name | cpio -ivd './a/b/c/*'

  2. Não diretamente, mas cpio tem uma opção -r/--rename . Infelizmente, há dois problemas com isso: ele pergunta sobre cada arquivo e recebe uma entrada de /dev/tty diretamente. O que significa que não é fácil automatizá-lo. Você poderia usar o programa expect se realmente quisesse. Aviso : não para pessoas de coração;) Note que ele não manipula arquivos com aspas (ou possivelmente espaços) corretamente. Ele espera que o nome do arquivo rpm, um padrão para os arquivos sejam extraídos e um comando sed para transformar cada arquivo. Exemplo de uso:

    cpio.sh rpm_name './a/b/c/*' 's#^./a/b/#foo/#'

Teoricamente, o script pode ser canalizado para expect , mas isso é deixado como um exercício para o leitor.

#! /bin/bash

SCRIPT=/tmp/$$.expect
RPM="$1"
FILES="$2"
TRANSFORM="$3"

echo "spawn sh -c \"rpm2cpio \\"$RPM\\" | cpio -ird '$FILES'\"" > "$SCRIPT"
rpm2cpio "$RPM" | cpio -it "$FILES" 2>/dev/null | sed "$TRANSFORM" | while read line
do
    echo "send \"$line\r\"" >> "$SCRIPT"
done
echo "wait" >> "$SCRIPT"
expect "$SCRIPT"
rm -f "$SCRIPT"
    
por 21.11.2012 / 02:29

Tags