Я ищу команду tar, которая отвечает следующим требованиям:
Я хочу исключить все файлы, заканчивающиеся на: backwpup и .zip (между ними и до них может быть что угодно, например uploads/123backwpup-123.zip) Я хочу исключить все папки в области /media/backup/ и /application/cache/
Я начинаю с уровня, который выглядит так:
- пример.com
- пример.de
- пример.org
С подкаталогами для каждого:
- /и т. д/
- /httpdocs/
- /lib/
- ...
Необходимо сохранить только содержимое /httpdocs/.
Я попробовал это с помощью команды:
tar --exclude={"*backwpup*.zip", "*/media/backup/*", "*/application/cache/*"} -czvf backup.tar.gz **/httpdocs
Но к сожалению резервные копии с путемwp-content/uploads/backwpup-4578-backups/2022-10-31_12-22-31_IKXUCSLD01.zipвсе еще включены.
решение1
Вы можете попробовать использовать следующую команду tar:
tar --exclude='backwpup.zip' --exclude='/media/backup/' --exclude='/application/cache/' -czvf backup.tar.gz example.com/httpdocs example.de/httpdocs example.org/httpdocs
Эта команда исключает все файлы, заканчивающиеся на "backwpup" или ".zip", а также папки в указанных местах. Она также включает только подкаталоги "httpdocs" в каждом каталоге домена
решение2
Может быть, так?
find * -type d \( -path '*/media/backup/*' -o -path '*/application/cache/*' \) -prune -o -path '*/httpdocs/*' -type f ! -name '*backwpup*.zip' -print0 | tar -czvf backup.tar.gz --null -T -
решение3
Если вы используете GNU tar, ознакомьтесь с документацией о том, как исключить файлы:https://www.gnu.org/software/tar/manual/html_node/exclude.html Ниже подробно описывается сопоставление с образцом:https://man7.org/linux/man-pages/man7/glob.7.html
Предполагая, что вы используете GNU BASH, вы можете перебрать каталоги с помощью цикла for:https://www.gnu.org/software/bash/manual/html_node/Looping-Constructs.htmlс использованием расширения имени файла (https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html)
В конце этой страницы приведены хорошие примеры: https://linuxize.com/post/bash-for-loop/