dynamische Suche nach ZIP-Dateien in einem bestimmten Pfad und Entpacken in denselben Ordner mit den entpackten Dateien?

dynamische Suche nach ZIP-Dateien in einem bestimmten Pfad und Entpacken in denselben Ordner mit den entpackten Dateien?

Wie kann ich eine dynamische Suche nach ZIP-Dateien in einem bestimmten Pfad (z. B. /opt/uploading/"*"/multiple .zipDateien) durchführen und diese in denselben Ordner wie die ZIP-Dateien entpacken?

Die folgende Funktion entpackt mehrere Zip-Dateien und entfernt Zip-Dateien. Ich möchte aber, dass die Zip-Dateien bei den entpackten Dateien vorhanden sind.

while true; do
   find -iname '*.zip' > zipindex
   test -s zipindex || break
   for zip in $(cat zipindex); do unzip -o $zip && rm $zip; done
done

Antwort1

Nun, es rm $zipwerden die Zip-Dateien entfernt, also entfernen Sie sie.

Antwort2

Dies ist für eine for-Schleife viel besser geeignet als für eine while-Schleife. Auf diese Weise können Sie auch das unnötige Speichern von Ergebnissen vermeiden.find -iname '*.zip' > zipindex

Machen Sie stattdessen so etwas:

#!/bin/bash

for zip in $(find -iname '*.zip'); do
    unzip -o $zip
done

Dadurch werden alle von „find“ erzeugten Zeilen durchlaufen.

Natürlich können Sie das Bash-Skript auch ganz weglassen und einen Find-Oneliner wie den folgenden erstellen:

find -iname '*.zip' -execdir unzip {} \;

BEARBEITEN: Dank @don_crissti und @ilkkachu ist es mir gelungen, den Aufruf einer weiteren Instanz der Shell in -exec zu vermeiden. -execdir ist gut zu wissen!

Antwort3

Mit GNU Parallel können Sie Folgendes tun:

find my_dir | grep -E '\.zip$' | parallel unzip
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir | grep  -E '\.zip$' | parallel -u unzip

Auf diese Weise müssen Sie nicht warten, bis die nächste ZIP-Datei angezeigt wird.

verwandte Informationen