
Я написал скрипт bash для резервного копирования папок и файлов с машины на наш сервер резервного копирования. Моя цель — исключить все файлы старше 6 месяцев из этого еженедельного резервного копирования. Для этого я использовал команду find для создания txt-файла, содержащего путь к этим файлам.
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 месяцев.
Как я могу это сделать?
заранее спасибо
решение1
Согласно man-страницам,
--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
Исключение сделано по шаблону чтения из файлов, а не по самим именам файлов.
Согласен, включение/исключение файлов по именам тоже может быть удобным, но это так не работает.
Чтобы включить файлы, созданные более недели назад, можно попробовать сделать следующее:
--files-from=<(find . -mtime -7 -print0)
решение2
Ок, я решил свою проблему! Строка "найти" осталась прежней:
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