आरपीएम से एकल निर्देशिका निकालें


0

मैं अलग-अलग फ़ाइल rpm rpm निकाल सकता हूँ :

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

मुझे संपूर्ण / a / b / c / निर्देशिका निकालने की आवश्यकता है (ऊपर दिए गए कमांड से काम नहीं करता है ।/a/b/c/ का उपयोग करके)?

  1. यह कैसे किया जा सकता है?
  2. क्या मैं संकेत कर सकता हूं कि कहां ./a/b/c के बजाय निर्देशिका "c /" बनाना है?

जवाबों:


2
  1. वाइल्डकार्ड का उपयोग करें, लेकिन इसे शेल से बचाने के लिए सावधान रहें:

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

  2. सीधे नहीं, लेकिन 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"

आपका पहला उपाय वही है जो मैं खोज रहा था। धन्यवाद
dimba
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.