Primeiramente, sugiro que você coloque as variáveis $FILES
e $DESTINATION
no comando unzip
entre aspas duplas, já que no caso de caminhos que contenham espaços eles quebrarão o comando unzip
; Note também que o seu script irá quebrar em nomes de arquivos contendo novas linhas, devido a ls
produzir os nomes de arquivos "brutos" contendo as novas linhas para o pipe; use o recurso globbing de bash
( for FILES in /path/to/archives/* [...]
).
Segundo, quando você não executa unzip
com a opção -q
, que suprime a saída normal, a saída é gravada em stdout
(STDandard OUTput), que é um arquivo tipicamente vinculado à tela do terminal ; shells como bash
podem redirecionar a saída de um comando de stdout
para outro arquivo: por exemplo, em bash
, isso pode ser feito por meio dos operadores >
e >>
, que respectivamente 1. Cria o arquivo se não existir ou truncar, em seguida, anexa a saída a ele e 2. Cria o arquivo, se não existente, ou anexa a saída a ele.
Portanto, nesse caso, como você está processando vários arquivos, não deseja truncar o arquivo de registro toda vez que um novo arquivo é processado, mas prefere anexar a nova saída ao log existente; incluindo minhas correções:
for FILES in /path/to/archives/*
do
unzip -v "$FILES" -d "$DESTINATION" >> /path/to/logfile
done