«Нет такого файла или каталога» при использовании «-Exec» с нахождением

Другая причина, по которой это может произойти, заключается в том, что сайту требуется SSL. Ваш браузер будет автоматически перенаправлять с HTTP на HTTPS, но curl и wget - нет. Так что попробуйте запрос с HTTPS вместо HTTP.

4
06.07.2018, 10:41
2 ответа

Ты пишешь

because it starts with a./ it will just be executed ("No such file or directory").

Это не то, что происходит. Вы указали одну команду для параметра find... -execпараметра echo "{}". Обратите внимание, что это не echo, а каталог, найденный с помощью find; это единственная команда, в имени которой есть пробел. Команда find(вполне обоснованно )не может выполнить команду с именем echo "./workspace/6875538616c6/raw/2850cd9cf25b/360".

Удалите одинарные кавычки вокруг параметра -exec, и вы обнаружите, что вам не нужны какие-либо дополнительные изменения или обходные пути:

find. -name '360' -type d -exec echo "{}" \;

Точно так же здесь вам нужно удалить цитирование всего значения, переданного в -exec. Но в этом случае вам все равно нужно заключать аргументы хранения в кавычки, чтобы оболочка не могла интерпретировать &и т. д.

find reallylongfolderstructure -name '360' -type d -exec curl 'http://user:token@ourdomain.net/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter={}' \; 
16
27.01.2020, 20:47

Проблема в том, что вы заключаете в кавычки и имя утилиты, и аргумент в виде одной строки, из-за чего findпытается выполнить все это как имя команды.

Вместо этого используйте

find. -type d -name '360' -exec curl "http://user:token@ourdomain.net/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter={}" ';' 

В некоторых старых реализациях find{}не будет распознаваться как путь, найденный findпри объединении с другой строкой, как указано выше, и вместо этого вам придется использовать дочернюю оболочку:

С вашим звонком наcurl:

find -type d -name '360' -exec sh -c '
    for pathname do
        curl "http://user:token@ourdomain.net/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter=$pathname"
    done' sh {} +

См. также:


Вbash:

shopt -s globstar

for pathname in./**/360/; do
    curl "http://user:token@ourdomain.net/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter=$pathname"
done

Параметр оболочки globstarделает доступным шаблон глобуса **. Он работает как *, но совпадает по косой черте в пути.

4
27.01.2020, 20:47

Теги

Похожие вопросы