-
use um curinga, mas tenha cuidado para protegê-lo do shell:
rpm2cpio rpm_name | cpio -ivd './a/b/c/*'
-
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 programaexpect
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 comandosed
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"