Wenn Sie das gesamte Verzeichnis wünschen, können Sie einfach den -r
Schalter verwenden:
zip -r -s 200M myzip photos_test
Dies schließt alle Unterverzeichnisse von ein photos_test
.
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
Wenn Sie das gesamte Verzeichnis wünschen, können Sie einfach den -r
Schalter verwenden:
zip -r -s 200M myzip photos_test
Dies schließt alle Unterverzeichnisse von ein photos_test
.
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 .
find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M
ls photos_test | zip -s 200M -@ photos
-@
bewirkt, dass zip eine Liste von Dateien aus stdin liest|
Pipe eine Ausgabe von ls
in die Eingabe des zip
Befehlsman 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). ⋮