Загрузите URL из файла CSV и переименуйте файл

У меня есть файл csv с тремя столбцами, как показано ниже. Мне нужно создать пакетный файл для загрузки изображений в URL-адресах с FTP-сервера в папку и переименовать их в новое имя из столбца A.

New_Name,URL,Status MyName1.jpg,ftp://images:Img12345@FTP-Location.com/images/image01.jpg,File Downloaded MyName2.jpg,ftp://images:Img12345@FTP-Location.com/images/image02.jpg,File Downloaded MyName3.jpg,ftp://images:Img12345@FTP-Location.com/images/image03.jpg,File Not Found 

Было бы действительно фантастично, если бы он мог записать статус загрузки обратно в файл csv! Если файл был успешно загружен, он будет записывать «Файл загружен» в столбец C (Статус), иначе он будет писать «Файл не найден».

Это возможно?

Для стартера я использовал следующий скрипт под названием test.sh , который выдал команду sh test.sh в командной строке, просто чтобы загрузить URL-адреса, без везения!

 #!/bin/sh for link in `cat test.csv | cut -d, -f2` do wget $link -O /mnt/nas_1tb/a-test/ done 

Я нашел приведенный выше код здесь .

One Solution collect form web for “Загрузите URL из файла CSV и переименуйте файл”

Кажется, вы хотите загрузить файл в конкретный каталог. Вы не можете сделать это, передав имя директории wget. Либо передайте полное имя файла, либо пусть wget выберет имя из ссылки. Если wget выбирает имя, он сохраняет файл в текущем каталоге, поэтому сначала измените его на нужный каталог.

Разбор URL-адресов с подстановкой команд является хрупким. Это может привести к ошибке, если URL-адреса содержат ? и не удастся, если они содержат пробелы. Вы можете использовать read для обработки списка по строкам.

 csv_file="$PWD/test.csv" cd /mnt/nas_1tb/a-test/ while IFS=, read -r column1 url trail; do wget "$url" done <"$csv_file" 

Поскольку вы хотите выбрать имена файлов, вы должны передать опцию -O . Но передайте все имя файла.

Чтобы обновить статус загрузки в третьем столбце, создайте новый файл с обновленными данными.

 while IFS=, read -r new_name url status; do wget -q -O "/mnt/nas_1tb/a-test/$new_name" "$url" case $? in 0) status='File fownloaded';; 8) status='File not found or server error';; *) status='Download failed';; esac printf '%s,%s,%s\n' "$new_name" "$url" "$status" done <test.csv >test-results.csv 

Обратите внимание, что wget не позволяет отличить «файл не найден» (HTTP 404) от других ошибок (например, HTTP 403 не авторизован, внутренняя ошибка сервера HTTP 500 и т. Д.). Но вы, по крайней мере, получаете разные ошибки для ошибок, когда сервер не может вернуть ответ.

  • bash если вопрос поведения инструкции
  • Как вычислить процент столбца файла?
  • Сравнить строки и обновить два разных файла
  • xdotool печатает 8 вместо Tab
  • Удалить скрипт оболочки Linux
  • Извлечь поля строки в переменные оболочки
  • Как скопировать все файлы в папку, за исключением файлов, которые записываются?
  • Нужна команда для отображения эха «успех»
  • Скрипт работает на Mac, но не Ubuntu
  • Как получить выполненную команду процесса, который успешно завершил работу с PID?
  • -r имя_файла &&. имя файла
  • Linux и Unix - лучшая ОС в мире.