
Я хочу скачать много файлов, которые имеют похожие имена: xxx/1.jpg
, xxx/2.jpg
, xxx/3.jpg
, и так далее в C:/Brawa/
. Поэтому я пишу:
CURL https://example/xxx/[1-3].jpg -o C:/Brawa/#1.jpg
Теперь я хочу, чтобы имя исходного файла соответствовало имени целевого файла: C:/Brawa/xxx/1.jpg
; C:/Brawa/xxx/2.jpg
; C:/Brawa/xxx/3.jpg
, и т. д.
Я использую командную строку:
CURL https://example/xxx/[1-3].jpg -o --remote-name C:/Brawa/*.jpg
Что-то не работает, но что я сделал не так?
решение1
Я думаю, это должно сработать:
CURL https://example/xxx/[1-3].jpg -o --remote-name C:/Brawa/#1.jpg
решение2
Значения параметров должны быть смежными.Во всех программах Unix или на основе Unix, и в большинстве программ на основе C, если вы указываете опцию со значением, как здесь -o C:/some/path
, вы должны сохранить опцию 'flag' и ее значение вместе, вы не можете вставить что-либо еще между ними. Почти во всех случаях вы можете использовать либо последовательные аргументы, как показано, либоодинокийобъединенный аргумент, например -oC:/some/path
(для краткой формы) или --output=c:/some/path
(добавленный знак равенства для длинной формы, т. е. два дефиса). Это более очевидно в Windows (CMD), где вы обычно используете /flag:value
все вместе, что отбивает у вас охоту пытаться вставить что-либо между ними.
Как вы прокомментировали ответ harrymc,--remote-name -o c:/some/path
анализируетправильно, но не работает — это потому, что они дают противоречивые инструкции, и он подчиняется только первой. -o c:/some/path --remote-name
также будет выполнять синтаксический анализ, но подчиняться только первой (что, если это файл, запишет все URL в тот же файл, оставив только последний, а если это каталог, запись вообще не произойдет).
ПомимоОтвет Анаксунаманаты можешьсменить каталогв нужное место, используйтетолько --remote-name
(или -O
заглавными буквами, в любом случае снетзначение), затем измените каталог обратно. CMD поддерживает pushd
и, popd
как и большинство оболочек Unix, поэтому
pushd c:\brawa\xxx & curl https://example/xxx/[1-3].jpg -O & popd
решение3
Предполагая, что вы используете последнюю версию curl
(версия 7.73.0 или выше), вы сможете добавить новую --output-dir
опцию для указания выходного каталога, например:
curl https://example/xxx/[1-3].jpg -O --output-dir "C:/Brawa/xxx"
Обратите внимание, что -O
(заглавная буква «о») такая же, как --remote-name
в примере выше.
Доступны последние официальные curl
двоичные файлы для Windowsздесьcurl
и доступна документация по опциям для самых последних версийздесь.
Обратите внимание, что для динамического создания папок вы можете использовать --create-dirs
опцию curl
(в разделе man-страницы curl для--output-dir
). Однако, похоже, это основано на --output-dir
параметре в примере выше, поэтому изменение этого значения может потребовать дополнительного написания скрипта (мне не удалось получить предложение, указанное вответ harrymcна этот вопрос (работает корректно под Windows 7).