cpio basic extract-Befehl, äquivalent 'tar xzvf'?

13902
Mark Harrison

Ich habe eine Unix-Softwaredistribution als komprimierte Cpio-Datei erhalten. Was ist der beste Befehl zum Extrahieren der Dateien?

11
Wann hast du "man cpio" gemacht, was hast du gesehen? vor 14 Jahren 0
Ich sehe: -i -o -p -t -B -c -C -f -F -HM -n -v -V-W -b -r -s-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-verzeichnisse --preserve- Änderungszeit --nicht erhaltener Besitzer --sparse --unbedingt Mark Harrison vor 14 Jahren 5

4 Antworten auf die Frage

10
Mark Harrison
gzip -cd foo.cpio.gz | cpio -idmv 
  • i: extrahieren (Eingabe)
  • d: Verzeichnisse erstellen
  • m: mtime bewahren
  • v: verbose
3
Matt
mkdir archive cd archive zcat ../archive.cpio.gz | cpio -idmv --no-absolute-filenames 

Obwohl dies eine alte Frage ist, wird sie bei Google hoch angezeigt. Ich dachte, ich könnte sie aktualisieren. Ich stimme der akzeptierten Antwort im Allgemeinen zu, aber Sie sollten "--no-absolute-Dateinamen" hinzufügen, sofern Sie nicht beabsichtigen, wichtige Systemdateien auf Ihrem Computer zu überschreiben. Ich persönlich bevorzuge "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.

0
nik

Diese Wikipedia-Seite cpiohat einige gute Notizen.
Weitere Informationen finden Sie im cpioHandbuch .

Ein Link von derselben Wikipedia-Seite behandelt den Vergleich mit tarArchiven .
Und hier ist ein Beispiel für die Verwendung cpiomit dem tarFormat .

0
Chris D'Amato

For example, to extract the archived contents of /etc/httpd/ to the current directory, creating subdirectories ./etc/httpd/

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

The accepted answer and Matt's were both helpful to me but I was stumped for a while because of three details:

  1. The matching pattern needs to be quoted to work as a pattern :P
  2. The option --no-absolute-filenames must precede the pattern on the command line
  3. Since that option removes the leading / from filenames, the matching pattern must also omit the leading /