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