Wie kann ich ein Gunzip in ein anderes Zielverzeichnis durchführen?

80

Wie kann ich ein Gunzip in ein anderes Zielverzeichnis als das aktuelle durchführen?

Das hat nicht funktioniert:

gunzip *.gz /putthemhere/
Scott Szretter
quelle

Antworten:

104

Bitten Sie gunzip, auf Standardausgabe auszugeben und zu einer Datei in diesem Verzeichnis umzuleiten:

gunzip -c file.gz > /THERE/file

zcatist eine Abkürzung für gunzip -c.

Wenn Sie mehrere Dateien gunzipen möchten, iterieren Sie über alle Dateien:

for f in *.gz; do
  STEM=$(basename "${f}" .gz)
  gunzip -c "${f}" > /THERE/"${STEM}"
done

(Hier basenamewird der Teil des Dateinamens ohne die Erweiterung abgerufen)

Benjamin Bannier
quelle
3
Erstellt die Datei, behält jedoch nicht das Eigentumsrecht, die Berechtigungen usw. bei. Dies kann je nach Ihrer konkreten Situation gut oder schlecht sein.
Chris Johnson
2

Wenn Sie eine einzelne Datei extrahieren und in ein Stammverzeichnis schreiben müssen, verwenden Sie Folgendes sudo dd:

zcat filename.conf.gz | sudo tee /etc/filename.conf >/dev/null

Wenn die Datei von einer entfernten Quelle stammt (dh ssh, curl https usw.), können Sie dies folgendermaßen tun:

ssh remoteserver cat filename.conf.gz | zcat | sudo tee /etc/filename.conf >/dev/null

(Beachten Sie, dass diese Beispiele nur für eine einzelne Datei funktionieren , im Gegensatz zum Beispiel * .gz, bei dem es sich um alle gzip-Dateien im Verzeichnis handelt.)

Jamieson Becker
quelle
Das Schreiben mit Root-Rechten sudo tee $filename >/dev/nullist etwas idiomatischer als das Verwenden von dd.
dcoles
1

Sie können versuchen, das Ergebnis mit> an den gewünschten Ort umzuleiten.

jangelfdez
quelle