Befehl cpio basic extract, Äquivalent 'tar xzvf'?

12

Ich habe eine Unix-Softwareverteilung als komprimierte cpio-Datei erhalten. Was ist der beste Befehl, um die Dateien zu extrahieren?

Mark Harrison
quelle
Wann hast du man cpiowas gesehen?
5
Ich sehe: -i -o -p -t-b-c-f-H-m-n-v-v-b-r-s-E-A-O-l 0 -a -I -L -R -d -m -u -? --extract --create --pass-through --list --block-size = --io-size = --force-local --nonmatching --file = --format = --message = --numeric- uid-gid --quiet --rsh-command = --verbose --dot --warning = --swap --rename --swap-bytes --swap-halfwords --to-stdout --pattern-file = - -only-verify-crc --append --link --absolute-dateinamen --no-absolute-dateinamen --null --reset-access-time --dereference --owner = --make-directorys --preserve- Änderungszeit --no-bewahren-Besitzer --sparse
Mark Harrison

Antworten:

11
gzip -cd foo.cpio.gz | cpio -idmv
  • i: extrahieren (Eingabe)
  • d: Verzeichnisse erstellen
  • m: Zeit einhalten
  • v: ausführlich
Mark Harrison
quelle
3
mkdir archive
cd archive
zcat ../archive.cpio.gz | cpio -idmv --no-absolute-filenames

Dies ist zwar eine alte Frage, sie taucht aber bei Google auf, sodass ich dachte, ich könnte sie aktualisieren. Ich stimme der akzeptierten Antwort im Allgemeinen zu, aber Sie sollten "--no-absolute-filenames" hinzufügen, es sei denn, Sie beabsichtigen, wichtige Systemdateien auf Ihrem Computer zu überschreiben. Auch persönlich bevorzuge ich "zcat" gegenüber "gzip -cd" oder "gunzip -c".

Beachten Sie schließlich, dass Sie cpio als root ausführen müssen (z. B. sudo), wenn Sie ein Root-Dateisystem extrahieren, das Geräteknoten enthält.

Matt
quelle
0

Um beispielsweise den archivierten Inhalt von / etc / httpd / in das aktuelle Verzeichnis zu extrahieren, erstellen Sie Unterverzeichnisse ./etc/httpd/

mkdir restored-etc-httpd
cd restored-etc-httpd    
zcat archive.cpio.gz | cpio -idmv --no-absolute-filenames "*etc/httpd/*"

Die akzeptierte Antwort und die von Matt waren beide hilfreich für mich, aber ich war eine Weile ratlos wegen drei Details:

  1. Das passende Muster muss in Anführungszeichen gesetzt werden, um als Muster zu funktionieren: P
  2. Die Option --no-absolute-filenamesmuss vor dem Muster in der Befehlszeile stehen
  3. Da bei dieser Option der führende /Punkt aus den Dateinamen entfernt wird, muss im übereinstimmenden Muster auch der führende Punkt weggelassen werden/
Chris D'Amato
quelle