Я в настоящее время использую следующую команду оболочки для копирования содержания локального каталога к другому каталогу:
cp -a /var/lib/jenkins /opt/jenkinsbackups
После того как файлы копируются, я смолю скопированный каталог, затем передающий сжатый каталог управлению исходным кодом (Мерзавец, Битоприемник). Команды оболочки похожи таким образом:
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
Процесс для сценариев оболочки следующие:
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
каталог. Я думаю, что после того, как каталог копируется и прежде чем он будет сжат, просто удалите файлы из несжатой копии каталога.
Можно реализовать его как этот:
tar
исходная папка (исключая папку Вы не хотите копировать),
tar czf jenkinsBackup_$(date +%Y%m%d-%H%M%S).tar.gz --exclude=dir_to_exclude *
cd
к папке назначения
Для удаления исходной папки, исключая некоторые папки/файлы, можно использовать следующий метод, берут от ТАК Вопросов и ответов
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
--exclude=PATTERN exclude files, given as a PATTERN