Extrahieren Sie den Ordnerinhalt aus dem 7z-Archiv in einen bestimmten Ordner

664
Matteo Tassinari

Ich habe eine 7z-Archivdatei, die auf der "root" -Ebene ein paar Dateien und dann ein Verzeichnis enthält, das wiederum sowohl Dateien als auch Ordner enthält:

- file1.txt - file2.txt - my_dir - file3.txt - file4.txt - another_dir - file5.txt - file6.txt 

Ich würde gerne wissen, ob es ein einziger Befehl, den mir das extrahieren Inhalt des my_dirinnerhalb eines Verzeichnisses meiner Wahl, so dass das Endergebnis ist:

- target_dir - file3.txt - file4.txt - another_dir - file5.txt - file6.txt 

Ich habe diese Befehle ausprobiert:

7za x -y archive.7z -o/path/to/target_dir my_dir 7za x -y archive.7z -o/path/to/target_dir 'my_dir/*' 

aber beide haben diese Verzeichnisstruktur erstellt:

- target_dir - my_dir - file3.txt - file4.txt - another_dir - file5.txt - file6.txt 
7
Funktioniert das: `7z x archive.7z mein_dir -y -r -otarget_dir`? harrymc vor 5 Jahren 0
Leider nein, dasselbe Ergebnis wie die Befehle, die ich versucht habe. Matteo Tassinari vor 5 Jahren 0
Dann extrahieren Sie es und bewegen Sie sich dann. harrymc vor 5 Jahren 0

1 Antwort auf die Frage

8
DavidPostill

Gibt es einen einzigen Befehl, mit dem my_dir in ein angegebenes Verzeichnis extrahiert werden kann?

Ja. Verwenden Sie die eOption anstelle von x:

7za e -y archive.7z -o/path/to/target_dir my_dir 

( xist Auszug mit vollen Pfaden )

e (Extrahieren) Befehl

Extrahiert Dateien aus einem Archiv in das aktuelle Verzeichnis oder in das Ausgabeverzeichnis. Das Ausgabeverzeichnis kann mit dem Schalter -o (Set Output Directory) festgelegt werden.

Dieser Befehl kopiert alle extrahierten Dateien in ein Verzeichnis. Wenn Sie Dateien mit vollständigen Pfaden extrahieren möchten, müssen Sie den Befehl x (Extrahieren mit vollständigen Pfaden) verwenden.

Befehl für Quelle e (Extrahieren)


Tatsächlich enthält der Ordner im Archiv Unterordner, die ich behalten möchte

In diesem Fall müssen Sie den Originalbefehl (mit x) verwenden und dann moveden Inhalt my_direiner Ebene nach oben verschieben.

Etwas wie die folgende Batchdatei (nicht getestet):

@echo off 7za x -y archive.7z -o/path/to/target_dir my_dir move /y my_dir\* /path/to/target_dir rd /s my_dir endlocal 

Von der Kommandozeile aus:

7za x -y archive.7z -o/path/to/target_dir my_dir && move /y my_dir\* /path/to/target_dir && rd /s my_dir 

Aber ich verwende Linux!

Dann sind folgende Befehle zu verwenden:

#!/bin/bash 7za x -y archive.7z -o/path/to/target_dir my_dir mv -f my_dir/* /path/to/target_dir rmdir my_dir 

Oder:

7za x -y archive.7z -o/path/to/target_dir my_dir && mv -f my_dir/* /path/to/target_dir && rmdir my_dir 

Was wahrscheinlich von jemandem vereinfacht werden kann, der es bashbesser weiß als ich.


Lesen Sie weiter

Hallo David, vielen Dank für Ihre Hilfe, aber ich fürchte, ich habe meine Frage zu stark vereinfacht. Der Ordner im Archiv enthält Unterordner, die ich gerne beibehalten möchte. Matteo Tassinari vor 5 Jahren 0
@MatteoTassinari Dann müssen Sie die ursprüngliche Option "x" verwenden und dann mit "move" den Inhalt von "my_dir" um eine Stufe nach oben verschieben. DavidPostill vor 5 Jahren 0
Ich befürchtete, dass ich wirklich gehofft hatte, dass dies mit einem einzigen Befehl erledigt werden könnte Matteo Tassinari vor 5 Jahren 0
@MatteoTassinari Die Antwort wurde mit einer vorgeschlagenen Batchdatei aktualisiert. DavidPostill vor 5 Jahren 0
Danke für das Skript, aber mein Betriebssystem ist CentOS, nicht Windows. Deswegen habe ich das "Linux" -Tag auf die Frage gestellt. Ich werde jedoch kein Problem damit haben, das in ein Linux-Äquivalent zu konvertieren. Matteo Tassinari vor 5 Jahren 0
@MatteoTassinari Die Antwort wurde aktualisiert, um "bash" zu verwenden. DavidPostill vor 5 Jahren 0