Como copiar todos os arquivos no diretório de forma recursiva e descompactar os arquivos compactados no fly [closed]

0

Eu tenho uma enorme coleção de arquivos padrão / compactados em um diretório com muitos subdiretórios.

Agora, preciso copiar esse diretório estruturado e todo o conteúdo (arquivos e subdiretórios) em outro disco e descompactar todos os arquivos compactados.

Então, para economizar tempo, eu quero copiar todos os arquivos no diretório de forma recursiva e descompactar os arquivos compactados em tempo real.

Como posso fazer isso?

    
por Jean S. 03.01.2018 / 11:22

2 respostas

0

Eu abordaria isso como três etapas separadas, usando $SOURCE e $DEST como seus diretórios de origem e de destino.

  1. Recrie a estrutura de diretórios de origem no diretório de destino

    find $SOURCE -type d | sed -e "s~^$SOURCE~~" | xargs -r -I dir mkdir -p "$DEST"/"dir"

  2. Mova todos os arquivos que não precisam ser descompactados

    find $SOURCE -type f -not -name '*.gz' | sed -e "s~^$SOURCE/~~" | xargs -r -I file cp "$SOURCE"/"file" "$DEST"/"file"

  3. Descompacte todos os arquivos compactados no diretório de destino

    find $SOURCE -type f -name '*.gz' | sed -e "s~^$SOURCE~~" | sed -e "s~.gz$~~" | xargs -r -I file bash -c 'gzip -dc "'"$SOURCE"'"/"file".gz > "'"$DEST"'"/"file"'

Dito isso, recomendamos que você use rsync -av para copiar todos os arquivos e find . -name '*.gz' -exec gunzip \{\} \; no diretório de destino para descompactar os arquivos. Esta é uma abordagem muito mais simples, com menos armadilhas potenciais. (As três etapas acima funcionaram para mim em um pequeno diretório de teste com um número limitado de arquivos e nomes de arquivos relativamente simples; YMMV para um caso de uso mais complexo.)

    
por 03.01.2018 / 14:12
0

tar soa como o comando que você deseja.

tar cf - <dir> | (cd <path-to-other-dir>; tar xf -) é geralmente o que eu uso quando quero copiar o conteúdo de um diretório para outra pasta.

    
por 03.01.2018 / 13:22