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
.
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
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 .
find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M
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). ⋮
Tags zip compression recursive arguments