Zip: liste d'arguments trop longue (80 000 fichiers dans l'ensemble)

J'ai besoin de compresser 80 000 fichiers en plusieurs fichiers zip. C'est la commande que j'utilise:

zip -s 200M photos_test/* 

Cependant, je reçois l'erreur suivante:

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

Que puis-je faire pour résoudre le problème, en plus de séparer manuellement les fichiers de dossier?

Merci

Si vous voulez le répertoire entier, vous pouvez simplement utiliser le commutateur -r :

 zip -r -s 200M myzip photos_test 

Cela inclura tous les sous-répertoires de photos_test .

 find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M 

Le problème semble être l'expansion du "*". Utilisez le nom du dossier ou ".":

Si vous souhaitez inclure le dossier racine dans le zip:

 zip -r my.zip folder_with_80k_files 

Si vous ne souhaitez pas inclure le dossier racine dans le zip:

 cd folder_with_80k_files zip -r my.zip . 

ls photos_test | zip -s 200M -@ photos

  • -@ fera que zip affiche une liste de fichiers de stdin
  • | Tuera une sortie de ls dans l' entrée de la commande zip

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). ⋮