Исключая определенные папки в рамках каталога от того, чтобы быть скопированным в копии каталога

Я в настоящее время использую следующую команду оболочки для копирования содержания локального каталога к другому каталогу:

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

После того как файлы копируются, я смолю скопированный каталог, затем передающий сжатый каталог управлению исходным кодом (Мерзавец, Битоприемник). Команды оболочки похожи таким образом:

  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

Процесс для сценариев оболочки следующие:

  1. Скопируйте корневой каталог Jenkins в каталог, где резервное копирование будет сохранено.
  2. Перейдите к резервному каталогу локально.
  3. Сожмите копию корневого каталога Jenkins.
  4. Удалите несжатую копию корневого каталога Jenkins в рамках резервного каталога.
  5. Мерзавец добавляет недавно сжатое резервное копирование.
  6. Фиксация мерзавца изменения (добавляющий сжатый файл резервной копии), с сообщением о фиксации “Jenkins Автоматизированное Резервное копирование”.
  7. Нажатие мерзавца к основному ответвлению репозитория в Битоприемнике.

Shell один лайнер я использую:

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

Мои вопросы, если бы существуют некоторые файлы, которые я должен исключить в копии до сжатия каталога, как я изменил бы команду оболочки для копирования каталога для исключения файлов? Например, вместо того, чтобы копировать все файлы:

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

Я должен исключить .ssh/ и secrets папки, найденные в /var/lib/jenkins каталог от того, чтобы быть скопированным, и также должен сохранить исходные файлы, которые были исключены в /var/lib/jenkins каталог. Я думаю, что после того, как каталог копируется и прежде чем он будет сжат, просто удалите файлы из несжатой копии каталога.

1
задан 26 July 2017 в 16:57

1 ответ

Можно реализовать его как этот:

  • tar исходная папка (исключая папку Вы не хотите копировать),

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

  • cd к папке назначения

  • Извлеките файл tar в папке назначения
  • Скопируйте файл tar
  • Удалите исходную папку

Для удаления исходной папки, исключая некоторые папки/файлы, можно использовать следующий метод, берут от ТАК Вопросов и ответов

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

В Вашем случае, если Вы хотите исключить два каталога (.ssh и secret), можно использовать:

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

tar человека

--exclude=PATTERN
    exclude files, given as a PATTERN
0
ответ дан 8 December 2019 в 04:34

Другие вопросы по тегам:

Похожие вопросы: