copiando uma árvore de diretórios para outro local, com compactação opcional

1

O que eu quero fazer é copiar um diretório para outra posição (no Linux) e compactar alguns arquivos (com uma certa extensão) com o GZip no destino, enquanto outros arquivos são apenas copiados. Isso poderia ser conseguido por um one-liner com boa eficiência? Muitos arquivos devem ser copiados, portanto, quanto mais eficiente, melhor.

    
por Boris Hsu 23.09.2011 / 08:54

1 resposta

1

Bem, como um acadêmico excersize:

set -e # abort on errors
find /source -print | while read object_name; do
  if [ -d "$object_name" ]; then
    mkdir -p /destination/$object_name
  else
    if echo "$object_name" | egrep "(txt|html|...)" >/dev/null # extensions you want to compress
      cat $object_name | gzip >/destination/${object_name}.gz
    else
      cp $object_name /destination/$object_name
    fi
  fi
  rm /source/$object_name # could comment this out to preserve the source if you have the space
done
    
por 23.09.2011 / 09:07