cpio podstawowe polecenie wypakowania, odpowiednik „tar xzvf”?

12

Otrzymałem dystrybucję oprogramowania Unix jako skompresowany plik CPIO. Jakie jest najlepsze polecenie do rozpakowania plików?

Mark Harrison
źródło
Kiedy zrobiłeś man cpioco widziałeś?
5
Widzę: -i -o -p -t -B -c -C -f -F -H -M -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 - niedopasowanie - plik = --format = - wiadomość = - numeryczny- uid-gid --quiet --rsh-command = --verbose --dot --warning = --swap --rename --swap-bytes --swap-halfwords --to-stdout --pattern-file = - -only-Verify-crc --append - link --absolute-fileenames --no-bezwzględne-fileenames - null --reset-access-time --dereference --owner = --make-katalogi --preserve- czas modyfikacji - nie-zachowaj-właściciel
Mark Harrison

Odpowiedzi:

11
gzip -cd foo.cpio.gz | cpio -idmv
  • i: ekstrakt (wejście)
  • d: utwórz katalogi
  • m: zachowaj mtime
  • v: pełne
Mark Harrison
źródło
3
mkdir archive
cd archive
zcat ../archive.cpio.gz | cpio -idmv --no-absolute-filenames

Chociaż jest to stare pytanie, pojawia się wysoko w Google, więc pomyślałem, że mogę je zaktualizować. Zgadzam się z ogólnie przyjętą odpowiedzią, ale powinieneś dodać „--no-absolutne-nazwy plików”, chyba że zamierzasz zastąpić ważne pliki systemowe na swoim komputerze. Osobiście wolę „zcat” niż „gzip -cd” lub „gunzip -c”.

Na koniec zauważ, że musisz uruchomić cpio jako root (np. Sudo), jeśli rozpakowujesz główny system plików zawierający węzły urządzeń.

Matt
źródło
0

Na przykład, aby wyodrębnić zarchiwizowaną zawartość / etc / httpd / do bieżącego katalogu, tworząc podkatalogi ./etc/httpd/

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

Zarówno zaakceptowana odpowiedź, jak i Matt były dla mnie pomocne, ale przez chwilę byłem zaskoczony z powodu trzech szczegółów:

  1. Pasujący wzorzec musi być cytowany, aby działał jako wzorzec: P
  2. Opcja --no-absolute-filenamesmusi poprzedzać wzorzec w linii poleceń
  3. Ponieważ ta opcja usuwa interlinię /z nazw plików, pasujący wzorzec musi również pomijać interlinię/
Chris D'Amato
źródło