zip: Argumentliste zu lang (insgesamt 80.000 Dateien)

9628
aneuryzm

Ich muss 80.000 Dateien in mehrere ZIP-Dateien komprimieren. Dies ist der Befehl, den ich benutze:

zip -s 200M photos_test/* 

Ich erhalte jedoch die folgende Fehlermeldung:

-bash: /usr/bin/zip: Argument list too long 

Was kann ich tun, um das Problem zu lösen, neben dem manuellen Aufteilen der Ordnerdateien?

Vielen Dank

11
Der Fehler `-bash: / usr / bin / zip: Argumentliste zu lang` kann zu folgenden Fällen führen: 1- weil der Schalter '-r' nicht verwendet wird, 2- zu viele Dateien für die Archivierung. Im ersten Fall ist die Antwort von @ Mat wahr und im zweiten Fall ist die Antwort von @ IgnacioVazquez-Abrams wahr. shgnInc vor 9 Jahren 0

4 Antworten auf die Frage

11
Mat

Wenn Sie das gesamte Verzeichnis wünschen, können Sie einfach den -rSchalter verwenden:

zip -r -s 200M myzip photos_test 

Dies schließt alle Unterverzeichnisse von ein photos_test.

Ich habe getan, was Sie vorschlagen, und ich habe eine kleine myzip.zip (7mb) und die Segmente (jeweils 200mb). Ich kann den Inhalt jedoch nicht entpacken, ich lade Unzip myzip.zip aber ich bekomme "bad zipfile offset (lseek)". Darüber hinaus muss ich sie auch in der Windows-Umgebung extrahieren. Dort habe ich nur einen Windows 7-Extraktor, denke ich. aneuryzm vor 13 Jahren 0
das sind verschiedene Fragen, öffnen Sie dazu eine andere Frage (Link zu dieser als Referenz). Vergewissern Sie sich, dass Sie die Namen der generierten ZIP-Dateien (nicht alle, aber mindestens die ersten und letzten) und die von Ihnen verwendete Befehlszeile ** exact ** bereitstellen. Mat vor 13 Jahren 0
9
stoffen

Das Problem scheint die Erweiterung des "*" zu sein. Verwenden Sie den Ordnernamen oder ".":

Wenn Sie den Stammordner in die ZIP-Datei aufnehmen möchten:

zip -r my.zip folder_with_80k_files 

Wenn Sie den Stammordner nicht in die ZIP-Datei aufnehmen möchten:

cd folder_with_80k_files zip -r my.zip . 
4
Ignacio Vazquez-Abrams
find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M 
Verwenden Sie `find. -mindepth 1 -maxdepth -name '* .json' | zip .zip - @ `, wenn Sie nicht teilen müssen und Dateien nach Erweiterung auswählen möchten. Daniel Sokolowski vor 6 Jahren 1
1
Mr. Tao

ls photos_test | zip -s 200M -@ photos

  • -@bewirkt, dass zip eine Liste von Dateien aus stdin liest
  • |Pipe eine Ausgabe von lsin die Eingabe des zipBefehls

man zip:

USE ⋮ -@ file lists. If a file list is specified as -@ [Not on MacOS], zip takes the list of input files from standard input instead of from the command line. For example,  zip -@ foo  will store the files listed one per line on stdin in foo.zip.  Under Unix, this option can be used to powerful effect in conjunction with the find (1) command. For example, to archive all the C source files in the current directory and its subdirectories:  find . -name "*.[ch]" -print | zip source -@  (note that the pattern must be quoted to keep the shell from expanding it). ⋮