Ich habe verschiedene ZIP-Dateien, die Unterordner und keine Unterordner enthalten. Ich möchte die gesamte ZIP-Datei in den Ordner extrahieren. Mein aktuelles Skript macht was ich will, wenn es Unterordner enthält. Wenn es jedoch keinen Unterordner gibt, werden diese separat in demselben Ordner aufgelistet. Dies ist verwirrend, da ich wissen muss, was sie sind.
#!/bin/bash ZIPDIR=/mnt/www/log/_tmp TMP=/tmp/zipfiles cd $ZIPDIR rm tmp/zipfiles 2>/dev/null ls -l *.zip if [ $? -eq 0 ] then echo ".zip file found" ls -1 $ZIPDIR/*.zip > $TMP for i in `cat $TMP` do unzip -o $i && rm $i done fi; # Removing top level folder mv $ZIPDIR/JCB/* . && rm -R JCB if [ $? -eq 1 ] then echo "NOT found" fi;
Meiner Meinung nach ist die ZIP-Datei, die keine Unterordner enthält. Ich muss sie aus fileName.zip und nicht aus file_1.txt erstellen, da der Name keinen Sinn macht. Das Endergebnis ist also diese Struktur nach dem Entpacken.
Aktualisiert: Der von @confetti bereitgestellte Code funktioniert. Vielen Dank. Es gibt noch eine andere ZIP-Dateistruktur, die ich vergessen habe zu erwähnen und die ich oben aufgenommen habe. Hier ist der endgültige Code mit meinen Änderungen. Es ist vielleicht kein effizienter Code, aber es scheint für mich zu funktionieren.
#!/bin/bash zipdir=/mnt/www/log/_tmp cd $zipdir for i in *.zip; do folder=$ mkdir -p $folder unzip -o $i -d $folder && rm $i subdirs=$(find $folder -type d | wc -l) if [[ $subdirs -eq 2 ]]; then mv ./$folder/* ./ rm -r $folder else if [[ $subdirs -gt 1 ]]; then mv ./$folder/*/* ./ rm -r $folder fi fi done
[* Warum sollten Sie die Ausgabe von 'ls' nicht analysieren *] (https://mywiki.wooledge.org/ParsingLs).
Kamil Maciorowski vor 6 Jahren
0
1 Antwort auf die Frage
0
confetti
#!/bin/bash ZIPDIR=/mnt/www/log/_tmp TMP=/tmp/zipfiles cd "$ZIPDIR" rm tmp/zipfiles 2>/dev/null for i in ./*.zip; do folder=$ mkdir "$folder" unzip -o "$i" -d "$folder" && rm "$i" subdirs=$(find "$folder" -type d -printf ".\n" | wc -l) if [[ $subdirs -gt 1 ]]; then mv ./$folder/*/* ./ rm -r "$folder" fi done
Getestet mit Dateien, die Ihrer gezeigten Struktur ähneln, und funktioniert perfekt für mich.
Ich bekomme Fehler bei verschiedenen ZIP-Dateien und es werden für einige Ordner 2 Ordner tief gespeichert. ** JCB-6.zip <- Enthält einen Unterordner ** `./batchUnzip.sh: Zeile 13: [[: JCB-6 JCB-6 / JCB JCB-6 / JCB / NCP51-0284052: Syntaxfehler im Ausdruck ( Fehlertoken ist "JCB-6 / JCB JCB-6 / JCB / NCP51-0284052") `** XZC605-0002319.zip <- Kein Unterordner **` ./batchUnzip.sh: Zeile 13: [[: XZC605- 0002319: Wert zu groß für Basis (Fehlertoken ist "0002319") `
ducsu vor 6 Jahren
0
Mein Fehler. Ich habe das "|" vergessen wc -l` hinter dem find-Befehl, um die tatsächliche _Anzahl_der Unterverzeichnisse abzurufen. Ich habe meine Antwort bearbeitet. Es wurde im Grunde eine Stringliste von Unterverzeichnissen mit einer vorherigen Zahl verglichen. Eops.
confetti vor 6 Jahren
0
Danke, dass Sie sich die Zeit genommen haben. Haben Sie die Möglichkeit bekommen, den Code zu testen? Während der Fehler weg ist, gibt es mir ein seltsames Ergebnis.
ducsu vor 6 Jahren
0
Schau es dir jetzt an. Ich habe den `./$ Ordner / *` im `mv`-Befehl am unteren Rand vermisst. Im Wesentlichen versucht man, einen Ordner in sich selbst zu verschieben, eops. Ich habe den aktuellen Code ausprobiert und es funktioniert für mich.
confetti vor 6 Jahren
0