curl скачать несколько файлов с помощью синтаксиса brace

Используя umask 0022 перед копированием, вы получите все новые файлы с разрешениями -rw-r - r - по умолчанию, но файлы можно сделать только исполняемыми вызывая непосредственно на них команду chmod + x.

Вы можете использовать сокращенную команду: chmod -R a + rX directory , чтобы сделать это вручную.

Чтобы автоматически установить все права доступа к файлам, вы можете использовать inotifywait следующим образом:

inotifywait -qm <directory> -e create -e moved_to -e modify \
 | while read a b c; do chmod a+rX "${a}${c}"; done
17
15.11.2015, 14:10
2 ответа

Существует альтернативный способ загрузки нескольких файлов с помощью curl:

urls="firstUrl secondUrl thirdUrl" 
for url in $urls
do
   curl -O "$url"
done

Обратите внимание,:обязательный пробел используется для разграничения различных URL-адресов.

2
27.01.2020, 19:46

Проблема заключается в том, как оболочка (, вероятно, BASH ), интерпретирует команду curl.

По сути, он смотрит на

curl -O http://domain/path/to/{file1,file2}

и расширяя его до:

curl -O http://domain/path/to/file1 http://domain/path/to/file2

Это проблема, потому что флаг -Oприменяется только к первому экземпляру, а не ко всем последующим.

Это можно исправить, заключив URL в двойные кавычки:

curl -O "http://domain/path/to/{file1,file2}"

Команда curl подтвердила это на GitHub и отправила PR как на справочную страницу -, так и в официальное руководство по curl , поэтому они должны отражать это потенциальное поведение подстановки в некоторые снаряды в будущем.

Если вам нужен простой тестовый пример, чтобы увидеть этот сбой и узнать, как его исправить, попробуйте загрузить два ZIP-файла с файлами.txt Моби Дика из Project Gutenberg .

Работает:

curl -O https://www.gutenberg.org/files/2701/2701-{0,h}.zip

предоставит следующий ответ:

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 500k 100 500k 0 0 380k 0 0:00:01 0:00:01 --:--:-- 380k Warning: Binary output can mess up your terminal. Use "--output -" to tell Warning: curl to output it to your terminal anyway, or consider "--output Warning: <FILE>" to save to a file.

(Если бы файлы, которые вы загружали, были необработанным текстом, то они просто выгружались бы в стандартный формат, вероятно, ваш экран, и это было бы плохо для Моби Дика , и поэтому файлы.zip используется вместо этого.)

Работает:

curl -O "https://www.gutenberg.org/files/2701/2701-{0,h}.zip"

вместо этого выдаст что-то вроде этого:

[1/2]: https://www.gutenberg.org/files/2701/2701-0.zip --> 2701-0.zip --_curl_--https://www.gutenberg.org/files/2701/2701-0.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 500k 100 500k 0 0 407k 0 0:00:01 0:00:01 --:--:-- 407k

[2/2]: https://www.gutenberg.org/files/2701/2701-h.zip --> 2701-h.zip --_curl_--https://www.gutenberg.org/files/2701/2701-h.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 522k 100 522k 0 0 1000k 0 --:--:-- --:--:-- --:--:-- 1000k

Обратите внимание, что эта проблема возникает только тогда, когда { }используется для подстановки. Если используется только [ ], двойные кавычки не нужны.

Между прочим, если wgetустановлен, он, вероятно, может обрабатывать подстановку без необходимости кавычек.

Работает:

wget http://domain/path/to/{file1,file2}

вытащил бы оба файла (, если бы они действительно существовали ).

Работает:

wget https://www.gutenberg.org/files/2701/2701-{0,h}.zip

извлечет zip-файлы Moby Dick в соответствии с двойным -цитируемым примером curlвыше.

4
13.05.2020, 22:37

Теги

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