Я написал сценарий bash для резервного копирования папок и файлов с машины на наш сервер резервного копирования. Моя цель - исключить из еженедельного резервного копирования все файлы старше 6 месяцев. Для этого я использовал команду find, чтобы создать текстовый файл, который содержит пути к этим файлам.
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/Exclusions.txt "%P\n"
Затем я использовал параметр --include-from в rsync.
rsync . -e ssh -qrtl --exclude-from=$SCRIPT_DIR/Exclusions.txt $USER@$DEST_SRV:$DEST_DIR
В результате резервная копия сработала, но не включение. Таким образом, все файлы были зарезервированы даже старше 6 месяцев.
Как я могу это сделать?
заранее спасибо
Хорошо, я решил свою проблему! Строка "найти" останется прежней:
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/includes.txt "%P\n"
И я использую параметр "--files-from" вместо "--exclude-from"
rsync . -e ssh -qrtl --files-from=$SCRIPT_DIR/includes.txt $USER@$DEST_SRV:$DEST_DIR
Согласно страницам руководства,
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
Исключение составляет шаблон чтения из файлов, а не по самим именам файлов.
Я согласен, что включение / исключение файлов по именам также может быть проблемой, но это не так, как это работает.
Вы можете попробовать что-то вроде этого, чтобы включить файлы новее, чем 1 неделю назад:
--files-from=<(find . -mtime -7 -print0)