Eu faria isso em duas find
chamadas:
- Um para encontrar todos os arquivos
zip
e processá-los - Outro para lidar com os arquivos regulares
Isso é um pouco complicado, a parte complicada é a chamada awk
. Ele processa a saída de unzip -l
, que não é muito amigável ao script. Ele procura por linhas que começam com números (para se livrar dos cabeçalhos), se livra de linhas vazias e finalmente corresponde a .process
de uma maneira que não diferencia maiúsculas e minúsculas.
FINDDIR="."
for f in 'find "$FINDDIR" -type f -iname '*.zip''; do
dir='dirname "$f"'
for p in 'unzip -l sth.zip | awk '{if (match($1, /^[0-9]+$/) && $1 > 0 && match(tolower($4), /\.processed$/)) print $4}''; do
echo "$dir/$p"
done
find "$FINDDIR" -type f -iname '*.processed'
Isso não pode lidar com zip
s recursivas, ou seja, se um arquivo zip estiver dentro de outro arquivo zip.