Excluindo certas pastas dentro de um diretório de serem copiadas em uma cópia do diretório

1

Atualmente, estou usando o seguinte comando shell para copiar o conteúdo de um diretório local para outro diretório:

cp -a /var/lib/jenkins /opt/jenkinsbackups

Quando os arquivos são copiados, tento o diretório copiado e, em seguida, confirmo o diretório compactado para o controle de origem (Git, Bitbucket). Os comandos do shell são assim:

  1. cp -a /var/lib/jenkins /opt/jenkinsbackups
  2. cd /opt/jenkinsbackups
  3. tar czf jenkinsBackup_$(date +%Y%m%d-%H%M%S).tar.gz jenkins/
  4. rm -rf /opt/jenkinsbackups/jenkins/
  5. git add –all
  6. git commit -m "Jenkins Automated Backup"
  7. git push

O processo para os scripts de shell é o seguinte:

  1. Copie o diretório inicial do Jenkins para o diretório em que o backup ser armazenado.
  2. Navegue até o diretório de backup localmente.
  3. Compacte a cópia do diretório inicial do Jenkins.
  4. Remova a cópia não compactada do diretório inicial do Jenkins dentro do diretório de backup.
  5. Git adiciona backup recém-compactado.
  6. Git confirme as alterações (adicionando o arquivo de backup compactado), com o mensagem de commit “Backup Automatizado Jenkins”.
  7. Git push para a ramificação principal do repositório dentro do Bitbucket.

Shell um revestimento que estou usando:

cp -a /var/lib/jenkins /opt/jenkinsbackups && cd /opt/jenkinsbackups && tar czf jenkinsBackup_$(date +%Y%m%d-%H%M%S).tar.gz jenkins/ && rm -rf /opt/jenkinsbackups/jenkins/ && git add --all && git commit -m "Jenkins Automated Backup" && git push

Minhas perguntas são, se houver alguns arquivos que eu preciso excluir na cópia antes de compactar o diretório, como eu modificaria o comando shell para copiar o diretório para excluir os arquivos? Por exemplo, em vez de copiar todos os arquivos:

cp -a /var/lib/jenkins /opt/jenkinsbackups

Eu preciso excluir as pastas .ssh/ e secrets encontradas no diretório /var/lib/jenkins de serem copiadas e também manter os arquivos originais que foram excluídos no diretório /var/lib/jenkins . Estou pensando que, depois que o diretório for copiado e antes de ser compactado, basta excluir os arquivos da cópia não compactada do diretório.

    
por J0991 26.07.2017 / 15:03

1 resposta

0

Você pode implementá-lo assim:

  • tar da pasta original (excluindo a pasta que você não deseja fazer backup)

    tar czf jenkinsBackup_$(date +%Y%m%d-%H%M%S).tar.gz --exclude=dir_to_exclude *

  • cd na pasta de destino

  • Extraia o arquivo tar na pasta de destino
  • Backup do arquivo tar
  • Remover a pasta original

Para remover a pasta original, excluindo algumas pastas / arquivos, você pode usar o método a seguir, de SO Q & A

find . -type 'f' | grep -v "NameToExclude" | xargs rm 
find . -type 'd' | grep -v "NameToExclude" | xargs rmdir

No seu caso, se você quiser excluir dois diretórios ( .ssh e secret ), você pode usar:

find . -type 'f' | xargs rm 
find . -type 'd' | grep -v ".ssh" | grep -v "secret"| xargs rmdir
% bl0ck_qu0te%     
por Yaron 26.07.2017 / 15:11