Primeiro, instale o AVFS , um sistema de arquivos que fornece acesso transparente dentro dos arquivos e execute o comando mountavfs
. Consulte Como faço para percorrer recursivamente arquivos compactados? para o fundo.
Depois disso, se /path/to/archive.zip
for um arquivo reconhecido, então ~/.avfs/path/to/archive.zip#
é um diretório que parece conter o conteúdo do arquivo.
Escreva um script auxiliar chamado has_large_file_rec
que procura um arquivo XML grande no arquivo zip passado como argumento e chama-se recursivamente em cada arquivo zip incorporado. Este script produz alguma saída se encontrar um arquivo XML grande dentro dele. A saída é truncada para eficiência, uma vez que, depois de encontrarmos um arquivo XML grande, poderíamos parar de pesquisar.
#!/bin/sh
## auxiliary script has_large_file_rec
find "$1#" -name '*.zip' -type f -exec has_large_file_rec {} \; \
-o -name '*.xml' -type f -size +1024k -print | head -n 1
No nível superior, se você encontrar um arquivo grande, mova-o para o diretório de arquivos grande.
find "~/.avfs$PWD" \
-name '*.zip' -sh -c '
a=$(has_large_file_rec "$0")
if [ -n "$a" ]; then mv "$0" ~/big-files/; fi
' {} \; -o \
-name '*.xml' -type f -size +1024k -exec mv {} ~/big-files/ \;