Fico feliz em responder minha própria pergunta porque queria registrar minha turbulência na esperança de que os outros acompanhassem o problema. por trás do meu rasto de lágrimas poderia ser poupado por procurar algumas palavras-chave.
Por fim, descobri a resposta certa , mas foi postada para a pergunta errada .
Alguns pontos de clareza:
- O manual não está se referindo a uma lista literal como em um arquivo, mas literalmente ao listar os arquivos no console.
- É compreensível que alguém possa ser levado a pensar que
foo
se referiu à lista de arquivos, mas na verdade pretende representar o nome do arquivo zip de saída. - A lista de arquivos é omitida no exemplo porque está usando a opção
-@
, que demonstra que "pega a lista de arquivos de entrada da entrada padrão em vez da linha de comando "
Compreendendo isso, agora estamos armados com uma variedade de maneiras de atingir a meta.
Primeiramente usando a lista de arquivos que criamos, podemos ler a lista com cat
e redirecionar a saída com um pipe como entrada padrão para zip:
cat zip.lst | zip -@ files.zip
adding: file1.txt (stored 0%)
adding: file2.txt (stored 0%)
adding: file3.txt (stored 0%)
adding: file.jpg (stored 0%)
adding: test.jpg (stored 0%)
Ver que adding: ...
para cada arquivo é certamente um bom sinal, mas esperávamos antes, então vamos confirmar:
unzip -l files.zip
Archive: files.zip
Length Date Time Name
--------- ---------- ----- ----
0 2016-05-24 14:54 file1.txt
0 2016-05-24 14:54 file2.txt
0 2016-05-24 14:54 file3.txt
0 2016-05-24 15:00 file.jpg
0 2016-05-24 14:59 test.jpg
--------- -------
0 5 files
SWEET! Mas quem quer criar uma lista de uso único de qualquer maneira? Essa é uma maneira terrível de resolver esse cenário em particular. Seria melhor obter uma lista de ls
e canalizar isso para zipar:
ls | zip -@ files.zip
adding: file1.txt (stored 0%)
adding: file2.txt (stored 0%)
adding: file3.txt (stored 0%)
adding: file.jpg (stored 0%)
adding: test.jpg (stored 0%)
Fabuloso! Agora vamos criar filtros com o incrível poder de grep
para apenas fechar o jpg por exemplo:
ls | grep .jpg | zip -@ images.zip
adding: file.jpg (stored 0%)
adding: test.jpg (stored 0%)
Ou apenas arquivos que começam com "arquivo"
ls | grep file. | zip -@ files.zip
adding: file1.txt (stored 0%)
adding: file2.txt (stored 0%)
adding: file3.txt (stored 0%)
adding: file.jpg (stored 0%)