Он не удаляет 4.txt
, потому что вы выполняете команду rsync
с *
, т.е. на отдельные исходные файлы. Следовательно, rsync
даже не рассматривает 4.txt
(или содержащий его каталог). Вместо этого запустите его в каталоге, содержащем источники, изменив *
на .
Затем rsync
может просмотреть каталог в целом, чтобы увидеть, чего не хватает.
rsync --exclude=3.txt -avcz --delete . ubuntu@server:/tmp/foo/
Ваш скрипт устанавливает флаг errexit
с помощью set -e
. После того, как вы его получите, непроверенные неудачные команды приведут к выходу из оболочки. Если вы используете программируемые сценарии завершения, некоторые из них могут запускать неудачную команду, что объясняет, почему завершение на вкладке -вызывает его.
Решение здесь состоит в том, чтобы не запускать сценарий, а запускать его как обычно, или заменить set -e
на достаточную проверку ошибок для всех соответствующих команд и на return
, если они не срабатывают. (Не exit
, так как это приведет к закрытию всей оболочки, return
возвращается из исходного скрипта.)