2

Я хочу предотвратить ситуации, когда исходная файловая система временно отключается при запуске

rsync -av --delete $source $target

Кажется, что если бы я мог сказать rsync отказаться от работы с пустым каталогом с исходным кодом, это бы сработало. Я не вижу никаких очевидных флагов или комбинаций флагов, которые сделали бы это, все же. Обратите внимание, что, как правило, источник является удаленным, поэтому немного сложнее определить, пуст ли он.

Как бороться с этой проблемой?

1 ответ1

1

Предполагая, что у вас есть оболочка входа в систему на удаленном хосте (и что удаленная оболочка - bash), используйте встроенный в compgen для проверки, является ли исходный каталог пустым.

Во-первых, убедитесь, что ваша переменная $source не содержит имени хоста. Вместо этого пусть имя хоста будет $remote_host .

if ssh $remote_host "compgen -G $source/*" | grep -q '^'
then
    rsync -av --delete $remote_host:$source $target
else
    printf "Directory %s is empty on host %s\n" "$source" "$remote_host"
fi

Можно было бы просто compgen -G $source/* > /dev/null но так как одного совпадения достаточно, чтобы доказать не пустоту, я надеюсь, что конвейер для grep -q будет быстрее в случае, когда может быть большой количество записей, которые соответствуют глоб.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .