Finde alle Reißverschlüsse und entpacke sie - Unix

9

Ich habe seit einiger Zeit versucht und glaube, dass ich ziemlich nah daran bin, aber ich bin ziemlich neu in Unix, also habe ich das schwierig gefunden.

Ich habe einen Ordner, der viele Ordner enthält, von denen einige ZIP-Dateien enthalten, einige nicht. Ich versuche, alle Zip-Dateien in beliebigen Unterverzeichnissen an Ort und Stelle zu entpacken.

Zum Beispiel habe ich:

Dateien / A / etwas.java

files / B / somezipfile.zip

files / C / someotherfile.zip

files / D / AnotherZipFile.zip

Ich möchte sie entpacken (vorausgesetzt, die Reißverschlüsse enthalten nur .java-Dateien), um ein Ergebnis zu erhalten wie: Dateien / A / etwas.java

files / B / javafile.java

files / C / someotherfilefromzip.java

files / D / Anotherfile.java

Es macht mir nichts aus, wenn die ZIP-Dateien nach dem Entpacken erhalten bleiben oder gelöscht werden, beides ist in Ordnung.

Was ich bisher versucht habe.

1) Ich habe erwartet, dass ich Rohrleitungen, die mir neu sind, wie folgt verwenden kann:

%Vor%

Das funktioniert nicht.

2) Ich habe einige Zeit damit verbracht zu suchen, das nächste, was ich mit einer Lösung online habe, ist:

%Vor%

Dies wird entpackt, aber entpackt sie in das aktuelle Arbeitsverzeichnis, ich wollte sie an der richtigen Stelle entpacken. Ich verstehe auch diesen Befehl nicht, den ich gerne möchte, während ich versuche zu lernen.

Jede Hilfe wird sehr geschätzt.

Danke,

    
ThePerson 11.02.2013, 13:36
quelle

3 Antworten

26
%Vor%

Dieser Befehl sucht im aktuellen Verzeichnis und in seinen Unterverzeichnissen rekursiv nach Dateien mit Namen, die mit *.zip pattern übereinstimmen. Wenn die Datei gefunden wurde, führt sie den Befehl sh mit zwei Parametern aus:

%Vor%

und

%Vor%

Dabei ist <filename> der Name der Datei, die gefunden wurde. Der Befehl sh ist der Unix-Shell-Interpreter. Option -c teilt Shell mit, dass das nächste Argument als Shell-Skript interpretiert werden soll. So interpretiert Shell das folgende Skript:

%Vor%

Vor dem Ausführen von% co_de erweitert% Shell den Befehl durch verschiedene Ersetzungen. In diesem speziellen Beispiel ersetzt es

%Vor%

mit Ausgabe des Befehls unzip , die tatsächlich den Verzeichnisnamen ausgibt, in dem sich die Datei befindet. Also, wenn der Dateiname dirname <filename> ist, rubbelt die Shell ./a/b/c/d.zip wie folgt:

%Vor%

Wenn ZIP-Dateinamen oder Verzeichnisnamen Leerzeichen enthalten, verwenden Sie Folgendes:

%Vor%     
Mikhail Vladimirov 11.02.2013, 13:45
quelle
19

Verwenden Sie -execdir anstelle von -exec , wodurch der Befehl in dem Verzeichnis ausgeführt wird, in dem die Datei gefunden wird, und nicht das Verzeichnis, in dem Sie find ausführen.

%Vor%     
chepner 11.02.2013 14:17
quelle
7
%Vor%     
Josh Jolly 11.02.2013 13:54
quelle

Tags und Links