Я использую SSH внутри конвейера CI / CD (поэтому он неинтерактивный) и пытаюсь выполнить команду пары find
(среди прочего), чтобы изменить владельца файлов и каталогов после выполнения LFTP mirror , но я продолжаю получать эту ошибку (которая приводит к сбою всего конвейера):
find: missing argument to `-exec'
Эта команда использует find
:
ssh -i ~/.ssh/id_rsa $USERNAME@$HOST "[other commands...]; find $SOME_PATH/ -type d -exec 'chmod 755 {} \;' && find $SOME_PATH/ -type f -exec 'chmod 644 {} \;' && echo Done"
I 'мы уже пытались использовать экранированные двойные кавычки, например, так: -exec \"chmod 755 {} \;\"
- но продолжает выдавать ту же ошибку.
В чем здесь главная проблема?
РЕДАКТИРОВАТЬ: Решено. Я удалил все кавычки для -exec
, удалил &&
и добавил дополнительную точку с запятой ;
к каждому find
, и все работает как положено.
ssh -i ~/.ssh/id_rsa $USERNAME@$HOST "[other commands...]; find $SOME_PATH/ -type d -exec chmod 755 {} \;; find $SOME_PATH/ -type f -exec chmod 644 {} \;; echo Done"
Поэтому используйте -exec whatever-command {} \;; [other command, echo, find, ls, whatever...]
.
Пожалуйста, проверьте этот ответ для получения дополнительной информации: https://unix.stackexchange.com/a/139800/291364
[...] Когда find
видит это поддельное exit
после директивы -exec … ;
не знает, что с этим делать;это опасно (неправильное) предположение, что вы подразумевали, что это путь для прохождения.Вам нужен разделитель команд: поставьте еще один ;
после \;
(с пробелом или без него).[...]