Dateien rekursiv dekomprimieren und dann die Originaldatei löschen, wobei entpackte Dateien in der Shell verbleiben

9

Ich habe bisher herausgefunden, wie man find verwendet, um alle Dateien rekursiv zu entpacken:

%Vor%

Aber ich kann nicht herausfinden, wie man die Zip-Dateien nacheinander nach der Extraktion entfernt. Durch das Hinzufügen von rm * .zip in einer -a -exec-Datei werden die meisten ZIP-Dateien in jedem Verzeichnis gelöscht, bevor sie extrahiert werden. Wenn Sie ein Skript mit dem Befehl rm (mit -i zum Testen) durchforsten, führt dies dazu, dass keine * .zips gefunden werden (oder zumindest beschwert es sich). Natürlich gibt es Leerzeichen in vielen der Dateinamen, aber an dieser Stelle ist die Syntaxierung in einem sed-Befehl, um _s hinzuzufügen, ein bisschen jenseits von mir. Danke für Ihre Hilfe!

    
Ben 08.04.2011, 04:18
quelle

5 Antworten

10

hast du es versucht:

%Vor%

oder

%Vor%

oder einen zweiten Fund nach dem Entpacken ausführen

%Vor%     
ggiroux 08.04.2011, 04:41
quelle
7

thx für den 2. Befehl mit -delete! Hat mir viel geholfen.. nur 2 (vielleicht hilfreich) Bemerkungen von meiner Seite:

-hat ' .zip' anstelle von '. zip' auf meinem Debian-System

verwendet

-use -execdir anstelle von -exec & gt; Dadurch wird jede Zip-Datei in ihrem aktuellen Ordner extrahiert, andernfalls erhalten Sie den gesamten extrahierten Inhalt in dem Verzeichnis, in dem Sie den find cmd aufgerufen haben.

finden. -depth -name '* .zip' -execdir / usr / bin / unzip -n {} \; -delete

THX & amp; Grüße, Nord

    
Nordmann 17.03.2012 17:21
quelle
2

Wie oben erwähnt, sollte dies funktionieren.

finden. -depth -name '* .zip' -execdir unzip -n {} \; -delete

Beachten Sie jedoch zwei Dinge:

  • Mit der Option -n wird dekomprimiert, vorhandene Dateien nicht zu überschreiben. Sie wissen möglicherweise nicht, ob sich die ZIP-Dateien von den gleichnamigen Zieldateien unterscheiden. Trotzdem entfernt das -delete die ZIP-Datei.
  • Wenn unzip die Datei nicht dekomprimieren kann - sagen wir wegen eines Fehlers - könnte sie es trotzdem löschen. Der Befehl wird es sicher entfernen, wenn -exec rm {} \; anstelle von -delete verwendet wird.

Eine sicherere Lösung könnte sein, die Dateien nach dem Entpacken in ein separates Verzeichnis zu verschieben, das Sie löschen können, wenn Sie sicher sind, dass Sie alle Dateien erfolgreich extrahiert haben.

    
John D. 15.12.2013 02:05
quelle
0

Entpacken Sie die Archive im Unterverzeichnis anhand des Dateinamens (../file.zip - & gt; ../ file /..):

%Vor%     
cmcginty 20.05.2015 02:26
quelle
0

Ich habe ein Verzeichnis, das sich mit gezippten CSV-Dateien füllt. Externe Prozesse schreiben häufig neue gezippte Dateien. Ich möchte die Originale wie gewohnt entpacken und entfernen.

Dafür benutze ich:

%Vor%

Es funktioniert, indem alle zip-Dateien gesucht und erweitert werden, die sich momentan im Verzeichnis befinden. Später, nachdem es fertig ist, gibt es möglicherweise auch neue entpackte neue Dateien, die noch nicht gelöscht werden sollen.

Ich lösche also, indem ich erfolgreich entpackte * .csv-Dateien finde, und benutze sed, um die ursprünglichen Dateinamen zum Löschen neu zu generieren, die dann über den Befehl xargs an rm übergeben werden.

    
Minkymorgan 31.03.2016 23:03
quelle

Tags und Links