Rekursiv Dateien entpacken und dann löschen der ursprünglichen Datei aus und entpackt die Dateien aus der shell
Ich habe bisher herausgefunden, wie es zu benutzen finden rekursiv entpacken Sie alle Dateien:
find . -depth -name `*.zip` -exec /usr/bin/unzip -n {} \;
Aber ich kann nicht herausfinden, wie entfernen Sie die zip-Dateien ein zu einer Zeit nach der Extraktion. Hinzufügen rm *.zip-in -a-exec endet das löschen die meisten zip-Dateien in jedem Verzeichnis, bevor Sie extrahiert werden. Rohrleitungen, die über ein Skript mit dem rm-Befehl (mit -i aktiviert zum testen) Ursachen finden, nicht finden *.Reißverschlüsse (oder zumindest das ist, was es beschwert sich). Es ist, natürlich, Leerzeichen in vielen der Dateinamen aber an dieser Stelle syntaxing in einem sed-Befehl zum hinzufügen _'s ist ein wenig über mich. Danke für Eure Hilfe!
- Was meinst du
recursively
-, zip-in zip? Für komplexe Aufgaben, ich persönlich würde schreiben ein helper-Skript (sagenunzip-and-rm.sh
) und -exec das Skript. - Ich entschuldige mich, wenn ich war nicht klar genug. Der Verzeichnisbaum geht von mindestens sechs oder sieben Ebenen nach unten mit den zip-Dateien, die auf den tiefsten Ebenen. Jede zip-Datei enthält zwei Dateien, und ich möchte Euch die anderen Dateien unberührt, sondern entfernen Sie dann die zip-Datei. Meine ursprüngliche versuchen hier, war nur zum Stopfen
unzip-and-rm
in einem script -exec, aber es nicht zu finden, alle zip-Dateien, und ich vermute, es liegt an den Leerzeichen im Dateinamen. - Ich weiß nicht, warum
it fails to find any zip files
ich kann es nicht glauben, könnten Sie fügen der Befehlszeile? - Bitte, werfen Sie einen Blick auf die Antwort an stackoverflow.com/a/51841035/2457251, wenn Sie möchten mehr Einblicke. Zum Beispiel können Sie den Befehl hinzufügen, der
rm $f
,mv $f
dem .sh Datei - oder fügen Sie einen beliebigen anderen Befehl, wenn Sie mögen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
haben Sie versucht:
oder
oder läuft eine zweite finden Sie nach dem entpacken eine
find: paths must precede expression: /usr/bin/unzip
.-delete
, wie ich nie wusste, Ihr! Eines der wichtigsten Kriterien, dass ich natürlich vergessen habe zu erwähnen ist, dass das entpacken und löschen passieren soll, Rücken an Rücken, als die Festplatte ist nicht groß genug, um entpacken Sie alles und gehen Sie dann wieder zu löschen. Vielen, vielen Dank!(i)name
- Klausel, müssen diese in Klammern eingeschlossen werden:find \( -iname "*.zip" -o -iname "*.7z" \) -execdir 7z x {} \; -delete
thx für den 2. Befehl mit -löschen!!! hat mir sehr geholfen..
nur 2 (vielleicht hilfreiche) Anmerkungen von meiner Seite:
-war die Verwendung der '.zip' statt `.zip` auf meinem debian-system
-Nutzung -execdir statt -exec > dies entpackt jede zip-Datei im aktuellen Ordner, sonst hast du am Ende alle extrahierten Inhalte in dir, die Sie aufgerufen, die finden cmd.
finden . -depth-name '*.zip' -execdir /usr/bin/unzip -n {} \; -delete
THX & Gruß,
Nord
(i)name
- Klausel, müssen diese in Klammern eingeschlossen werden:find \( -iname "*.zip" -o -iname "*.7z" \) -execdir 7z x {} \; -delete
. Beachten Sie auch, dassiname
kann besser sein, da es auch Spiele.ZIP
.Wie oben erwähnt, sollte diese Arbeit.
finden . -depth-name '*.zip' -execdir unzip-n {} \; -delete
Beachten Sie jedoch zwei Dinge:
Eine sicherere Lösung könnte sein, verschieben Sie die Dateien nach dem entpacken in einem eigenen Verzeichnis, dass Sie den Papierkorb, wenn Sie sicher sind, dass Sie extrahiert alle Dateien erfolgreich.
Entpacken Sie die Archive in das Unterverzeichnis basierend auf den Namen der Datei (../file.zip -> ../Datei/..):
Habe ich ein Verzeichnis füllt sich mit gezippten csv-Dateien. Externe Prozesse sind das schreiben der neuen Zip-Dateien, um es oft. Ich möchte bulk entpacken und entfernen Sie die Originale, wie Sie tun.
Zu tun, die ich benutze:
Es funktioniert durch die Suche und den ausbau des gesamten zip-Dateien, die gegenwärtig im Verzeichnis. Später, nach Abschluss gibt es möglicherweise neue entpackte neue Dateien gemischt in dort auch, die nicht gelöscht werden sollen, noch.
Also ich löschen von der Suche erfolgreich entpackt *.csv-Dateien, und mit sed zu regenerieren den ursprünglichen Dateinamen für das löschen die dann zugeführt rm über den xargs-Befehl.