Да, sftp не очень хорошо работает с отчетами о состоянии выхода.
Вы можете использовать diff, чтобы найти, есть ли различия, по умолчанию, diff дает статус выхода 1, если естьразница , что означает, что вы можете использовать его в скрипте.
Чтобы сравнить локальный файл и удаленный файл с diff:
ssh user_name@remotehost ls -R /remote/dir > remotedirfiles.txt
ls -R /local/dir > localdirfiles.txt
diff remotedirfiles.txt localdirfiles.txt
И если ssh запросит у вас пароль, это не сработает, вам нужно будет перенаправить оба результата в текстовые файлы и сравнитьих с разн.