Как я могу заставить rsync игнорировать отсутствующие файлы?

9

Я выполняю команду, подобную следующей, для нескольких разных систем:

$ rsync -a -v foo@machine.company.com:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/.

Иногда * .log не существует, и это нормально, но rsync генерирует следующую ошибку:

receiving file list ... rsync: link_stat "/path/to/first/*.log" failed: No such file or directory (2)
done

Есть ли способ подавить это? Единственный способ, которым я могу придумать, - это использовать фильтры include и exclude, которые кажутся мне PITA. Спасибо!

Джо Касадонте
источник

Ответы:

10

Я думаю, что ответ на вопрос лучше всего описан в этом ответе:

https://stackoverflow.com/a/27637277/1236128

--ignore-missing-args

К сожалению, только более поздние версии имеют эту функциональность. Я использую RHEL 7 с rsync 3.0.9, который, кажется, не имеет этой опции.

Джонатан Комар
источник
2

Чтобы уточнить, вы просто хотели бы не «увидеть» ошибку? В этом случае вы можете просто перенаправить стандартный вывод ошибок, но в конечном итоге вы можете пропустить более серьезную ошибку, о которой вы, возможно, захотите узнать.

Пример вывода ошибки перенаправления

rsync -a -v foo@machine.company.com:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/ 2>/dev/null

Если вместо этого вы хотите пропустить ошибку только в несуществующем файле, вы не можете изменить фильтр rsync * .log и хотите избежать использования include, вы можете заключить его в сценарий, чтобы продолжить на основе состояние.

Пример скрипта

#!/bin/sh
# Script to Handle Rsync based on Log File Existence
if [ "$(ls -A /path/to/first/*.log > /dev/null > 2&1)" ]; then
     # Log Exists Use This Rsync
    rsync -a -v foo@machine.company.com:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/
else
    # Log Does Not Exist Use This Rsync
    rsync -a -v foo@machine.company.com:'path/to/second.txt' /dest/folder/0007/
fi

Надеюсь, я помог.

Крондор
источник