[OFFEN] Hat jemand eine Automatik-Lösung zum zip Cleanen?

LalaLandi

LalaLandi

Neues Mitglied
2
Hallo.

Mit 7zip (das benutze ich am liebsten) packe ich immer wieder mal den Ordner einer APP ein.

Leider sind diese Archive immer sehr gross.

Man kann sie eigentlich von 23-30 MB auf knappe 100 kB schrumpfen.

Dazu lösche ich im ZIP dann immer

.gradle
.idea
gradle
build
app/build

Was keine Probleme macht, bis eine "Fehlermeldung" das ein "Grandle" notwendig wäre. Aber das macht das ja Fix wieder ganz.

Leider passiert es dabei dann aber manchmal doch, dass man einen falschen Ordner ausersehen löscht und danach kann man die Archiv-Datei wegwerfen.

Gerne würde ich deshalb diesen Prozess aber automatisieren. Leider sind alle versuche mit dem Kommandozeilen-Tool von 7z bisher gescheitert. Löschen von ganzen Ordnern ist mir bisher einfach nicht gelungen. Die Doku hierfür ist von 7z auch irgendwie mangelhaft.

Ist jemand so was schon mal hier zufällig gelungen?
 
nimm doch das normale zip oder tar(.gz) und pack nur die ordner welche du brauchst anstatt alles und dann rauslöschen (wobeis mit 7z sicherlich auch geht)
 
Das hilft aber nicht, um bereits über 100 Dateien zu verkleinern.

Leider kennt 7z kennt keinen solche Vorfilter.

Außerdem bekomme ich öfters mal welche zugespielt. Die sind auch etwas Faul oder wollen nichts kaputt machen.


Zur Zeit bleibt nur jede Datei einzeln zu entpacken und wieder neu zu packen. Aber bei 3000 bzw. 3 Mio Dateien dauert das Ewigkeiten.
 
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von: hagex - Grund: Direktzitat entfernt, Gruß von hagex
Hallo Lala,

du bist mit deiner Frage leider im falschen Forum gelandet. (App-Entwicklung)

Wir Entwickler entpacken i.d.R. im/mittels Source-Code

Ich schiebe mal deinen Beitrag in den passenden Bereich
 
Vielleicht hat irgendwann das Android Studio endlich einen ordentlichen Export-Filter, dann wäre es doch richtig hier gewesen.

Nun ... so verschoben ... könnte man nun leider Meinen eine APP zu suchen, die sowas macht. Aber diese APPs laufen ja nicht auf dem Entwickler-Rechner. (ausser in der Emu).
 
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von: hagex - Grund: Direktzitat entfernt, Gruß von hagex
Sorry Lala,

ich bin mir jetzt selbst nicht mehr sicher , wohin ich dich schieben sollte :)
(ich kann dich wieder auch zu "mir" holen:)

Machst du das zur Datensicherung deiner Projektpfade ??
 
Solange ich es noch nicht im Android Studio wie in anderen IDEs eingebaut ist, geht nur ein rechter Mausklick auf den Ordner und "ZIPPen". Zusätzlich erschwert wird das, da manche es mit den Ordner als Basis und andere wieder im Zip-Root-Verzeichnis machen.

Ich denke aber an dem automatischen entpacken und neu einpacken werde ich wohl nicht vorbeikommen, um so was zu automatisieren. Das dürfte aber am ende sehr die Zeitstempel alle durcheinanderbringen.

Nimmt man es ganz genau gehört das Thema zur Zeit in ein 7z-Forum. Doch ein solches gibt es nicht. :-( Ausser bei sf.net. Aber das ist mehr für die Entwicklung von 7z selbst.

-Update-

Bin gerade am Überlegen, ob ich was ganz schlimmes nehmen sollte. PHP: Zip - Manual - Dann ist es endgültig nicht mehr exakt einzuordnen ;-)
 
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von: hagex - Grund: Direktzitat entfernt, Gruß von hagex
Öhm , nur mal so am Rande

a) ich nehme dich gleich wieder rüber - interessiert die anderen Code-Gestörten auch :)
b) ich habe mir dazu ein robocopy script/batch geschrieben: Synchronisiert mir alles "Relevante" (nicht den Wasserkopf) ins Ziel und führt danach das zip/rar aus.
 
LalaLandi schrieb:
vetzki schrieb:
nimm doch das normale zip oder tar(.gz) und pack nur die ordner welche du brauchst anstatt alles und dann raus löschen (wobei es mit 7z sicherlich auch geht)

Das hilft aber nicht, um bereits über 100 Dateien zu verkleinern.

Leider kennt 7z kennt keinen solche Vorfilter.

Außerdem bekomme ich öfters mal welche zugespielt. Die sind auch etwas Faul oder wollen nichts kaputt machen.


Zur Zeit bleibt nur jede Datei einzeln zu entpacken und wieder neu zu packen. Aber bei 3000 bzw. 3 Mio Dateien dauert das Ewigkeiten.

Wieso hilft das nicht bei über 100 dateien?
zur not (aus 7z) tar cf - --exclude=bla --exclude=*bla2 .... directory | 7za a -si directory.tar.7z

edit:
directory nach exclude

edit2:
die größe macht keinen großen unterschied
-rw-r--r-- 1 mv mv 587K 9. Mai 13:31 music.tar.7z
-rw-r--r-- 1 mv mv 588K 9. Mai 13:31 music.tar.gz
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: swa00
vetzki schrieb:
Wieso hilft das nicht bei über 100 dateien?
zur not (aus 7z) tar cf - directory --exclude=bla --exclude=*bla2 .... | 7za a -si directory.tar.7z

Naja.... Unter dem DOS/Windows geht sowas seit 1993 nicht. :-(

Warum nur kann es nicht so leicht sein:

for %a in (*.zip) do "C:\Program Files\7-Zip\7z.exe" %a -removefolder x,y,z,*\x,*\y,*\z

Unter Linux hätte ich das längst sicher auch so lösen können.

Aber an einem komplexen Script werde ich wohl nicht vorbei kommen.
 
hast du oben meinen Vorschlag b) übersehen ? (windows)
 
LalaLandi schrieb:
vetzki schrieb:
Wieso hilft das nicht bei über 100 dateien?
zur not (aus 7z) tar cf - directory --exclude=bla --exclude=*bla2 .... | 7za a -si directory.tar.7z

Naja.... Unter dem DOS/Windows geht sowas seit 1993 nicht. :-(
.

evtl mal mit cygwin versuchen das sollte dort doch eigentlich gehen (oder in der powershell evtl. ? )
[doublepost=1494336430,1494329837][/doublepost]Hier sowas sollte z.b. doch gehen?

Code:
#!/usr/bin/python3

#
#
#
import subprocess
from sys import argv,exit

def check():
    cmd = subprocess.getstatusoutput("tar")
    if cmd[0] == 127:
        print("Tar not in PATH\n%s" %(str(cmd[1])))
        exit()

class Main:
    def __init__(self,filename):
        try:
            self.dp = open(filename+"/.DONTPACK").read().split("\n")
        except (FileNotFoundError,NotADirectoryError) as e:
            print(".DONTPACK not found or not a directory\n%s" %str(e))
            exit()
        
        self.dp.remove("")
        self.pack(filename)
    
    def pack(self,filename):
        base = ["tar","czf",filename+".tar.gz"] # cvzf für ausgabe der gepackten dateien
        cmd = base + ["--exclude="+v for v in self.dp]
        cmd.append(filename)
        subprocess.call(cmd)


if __name__ == "__main__":
    check()
    if len(argv) < 2:
        print("Specifiy folder")
        exit()
    else:
        Main(argv[1])

"""
.DONTPACK  z.B.:
.gradle
.idea
gradle
build
*.apk
"""

funktioniert mit cygwin und unter linux
mv@DESKTOP-0RVF56I /cygdrive/c/Users/mv/Documents/tmp
$ for i in *;do ./packFolder.py $i;done
.DONTPACK not found or not a directory
[Errno 2] No such file or directory: 'Music3/.DONTPACK'
.DONTPACK not found or not a directory
[Errno 20] Not a directory: 'packFolder.py/.DONTPACK'

mv@DESKTOP-0RVF56I /cygdrive/c/Users/mv/Documents/tmp
$ ls
Music Music.tar.gz Music2 Music2.tar.gz Music3 packFolder.py

mv@DESKTOP-0RVF56I /cygdrive/c/Users/mv/Documents/tmp
$ ls -lh
total 11M
drwxrwxrwx+ 1 mv Administratoren 0 May 9 14:38 Music
-rw-r--r--+ 1 mv Kein 5.0M May 9 15:21 Music.tar.gz
drwxr-xr-x+ 1 mv Kein 0 May 9 15:13 Music2
-rw-r--r--+ 1 mv Kein 5.1M May 9 15:21 Music2.tar.gz
drwxr-xr-x+ 1 mv Kein 0 May 9 15:12 Music3
-rwxr-xr-x+ 1 mv Kein 940 May 9 15:21 packFolder.py

mv@DESKTOP-0RVF56I /cygdrive/c/Users/mv/Documents/tmp
$ diff Music/.DONTPACK Music2/.DONTPACK
3d2
< gradle

mv@DESKTOP-0RVF56I /cygdrive/c/Users/mv/Documents/tmp
$ ls Music3/.DONTPACK
ls: cannot access 'Music3/.DONTPACK': No such file or directory
snip.PNG
 
Zuletzt bearbeitet:
Darf ich mal fragen wofür das überhaupt gut ist? Wenn man den Code mal jemandem geben will, ok, aber das macht man ja nicht soo häufig.
Ansonsten empfehle ich ganz start, auch für Projekte alleine, ein Git Repository zu verwenden. (dort dann per .gitignore die ungewünschten Ordner ignorieren)
Wenn es um Datensicherung geht, das Git Repository halt entweder auf einem Server (unwahrscheinlich) oder bei Gitlab oder Bitbucket kostenlos als privates Repo hochschieben. Github bietet kostenlos nur öffentliche an, aber die beiden anderen auch private afaik.
 
LalaLandi schrieb:
Gerne würde ich deshalb diesen Prozess aber automatisieren. Leider sind alle versuche mit dem Kommandozeilen-Tool von 7z bisher gescheitert. Löschen von ganzen Ordnern ist mir bisher einfach nicht gelungen. Die Doku hierfür ist von 7z auch irgendwie mangelhaft.

Keine Ahnung ob es dir hilft. In der Anlage findest du ein Beispiel wie man mit Hilfe einer Batch-Datei Ordner packen kann. Dabei hast du die Möglochkeit Dateien einzuschließen oder auszuschließen.

Entpacke die Datei packen.zip nach c:\packen

Dort solltest du folgende Ordner haben:
c:\packen\7zip
c:\packen\project
c:\packen packen.bat
c:\packen\packliste.txt

So sieht packen.bat aus:

7zip\7za a -tzip C:\packen\testzip.zip @C:\packen\packliste.txt -scsWIN -r -slp
pause


und So sieht der Inhalt von packenliste.txt aus:

project\*.*

Dort kannst du mehrere Zeilen angeben. In diesem Beispiel ist nur eine Zeile project\*.*

Testzip.zip wird nach dem Aufruf von packen.bat erzeugt.

Auf jeden Fall hast du die Möglichkeit in der Datei packenliste.txt die zu packenden Ordner anzugeben. Wildcards wie *.txt oder *.bmp usw. sind auch möglich. packliste.txt ist eine Include-Liste. Du kannst bei 7zip auch eine Exclude-Liste angeben. Müsste in der Anleitung stehen.

Im Ordner 7zip gibt es
7-zip.chm (Hilfe)
und die Dateien wegen Copyright.

Evtl. Hilft es..
 

Anhänge

  • packen.zip
    304,7 KB · Aufrufe: 60
  • Danke
Reaktionen: swa00
@enrem

Ich danke Dir für deinen wertvollen Beitrag und deine Mühe
 
@swa00

Gerne...

Habe wegen dem Exclude mal geschaut und das geht so:

In der include.txt das angeben was man packen möchte und in der exclude.txt das angeben was nicht gepackt werden soll.

7zip\7za a -tzip c:\packen\testzip.zip @c:\packen\include.txt -x@c:\packen\exclude.txt -scsWIN -r -slp
 
  • Danke
Reaktionen: LalaLandi

Ähnliche Themen

wernho
Antworten
11
Aufrufe
694
wernho
wernho
Laser5001
  • Laser5001
Antworten
2
Aufrufe
900
Laser5001
Laser5001
B
Antworten
7
Aufrufe
1.346
bqde
B
Zurück
Oben Unten