используйте подстановочный знак, но будьте осторожны, чтобы защитить его от оболочки:
rpm2cpio rpm_name | cpio -ivd './a/b/c/*'
Не напрямую, но cpio
имеет переключатель -r/--rename
. К сожалению, с этим связаны две проблемы: он запрашивает каждый файл и принимает данные непосредственно из /dev/tty
. Что означает, что это не так просто автоматизировать. Вы можете использовать expect
программу, если вы действительно хотите это сделать. Предупреждение: не для слабонервных;) Обратите внимание, что он не обрабатывает файлы с кавычками (или, возможно, пробелами) должным образом. Он ожидает имя файла rpm, шаблон для извлечения файлов и команду sed
для преобразования каждого файла. Пример использования:
cpio.sh rpm_name './a/b/c/*' 's#^./a/b/#foo/#'
Теоретически сценарий можно было бы expect
но это оставлено в качестве упражнения для читателя.
#! /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"