zip: Lista de argumentos muito longa (80.000 arquivos no total)

11

Eu preciso compactar 80.000 arquivos em vários arquivos zip. Este é o comando que eu uso:

zip -s 200M photos_test/*

No entanto, recebo o seguinte erro:

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

O que posso fazer para resolver o problema, além de dividir manualmente os arquivos da pasta?

obrigado

    
por aneuryzm 19.04.2011 / 10:49

4 respostas

11

Se você quiser o diretório inteiro, basta usar a opção -r :

zip -r -s 200M myzip photos_test

Isso incluirá todos os subdiretórios de photos_test .

    
por 19.04.2011 / 11:00
7

O problema parece ser a expansão do "*". Use o nome da pasta ou ".":

Se você deseja incluir a pasta raiz no zip:

zip -r my.zip folder_with_80k_files

Se você não quiser incluir a pasta raiz dentro do zip:

cd folder_with_80k_files
zip -r my.zip .
    
por 18.10.2014 / 12:29
4
find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M
    
por 19.04.2011 / 11:03
1

ls photos_test | zip -s 200M -@ photos

  • -@ fará com que o zip leia uma lista de arquivos de stdin
  • | canalizará uma saída de ls para a entrada do comando 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).
⋮
    
por 11.07.2017 / 10:14