No Unix com o GNU find (incluindo o Linux) você pode usar isso para a recursão AND iteration
find . -name '*.gz' -exec sh -c 'gunzip -c "{}" >"/output/path/{}"' \;
Em outros Unix / find embedded {} pode não funcionar, então acho que você precisa de shell (supondo Bourneish)
find . -name '*.gz' | while read f; do gunzip -c "$f" >"/output/path/$f"; done
Isto assume que nenhum subdiretório é chamado something.gz, o que seria perverso; se assim for, adicione -type f
. Se todos os arquivos forem compactados, -type f
sozinho será suficiente.
Mas pode ser mais fácil para copiar a árvore de arquivos compactados para o local gravável primeiro (muitas maneiras no Unix: cp -R
, rsync -r
, tar cf - | (cd somewhere; tar xf -)
e até mesmo no Windows xcopy
) e descompacte as cópias.