Передача нескольких аргументов в параллельную функцию при загрузке на FTP

Я использую для загрузки изображений на ftp-сервер. Пример скрипта есть

      #                         destination.       origin
ncftpput -R ftp_server icon_d2/cape_cin ./cape_cin_*.png
ncftpput -R ftp_server icon_d2/t_v_pres ./t_v_pres_*.png
ncftpput -R ftp_server icon_d2/it/cape_cin ./it/cape_cin_*.png
ncftpput -R ftp_server icon_d2/it/t_v_pres ./it/t_v_pres_*.png

Я пытаюсь распараллелить это с GNU, но я изо всех сил пытаюсь передать аргументы в . Я знаю, что я делаю неправильно, но почему-то не могу найти решение.

Если я создам массив того, что мне нужно загрузить

      images_output=("cape_cin" "t_v_pres")

# suffix for naming
projections_output=("" "it/")
# remote folder on server
projections_output_folder=("icon_d2" "icon_d2/it")

# Create a list of all the images to upload 
upload_elements=()
for i in "${!projections_output[@]}"; do
    for j in "${images_output[@]}"; do
        upload_elements+=("${projections_output_folder[$i]}/${j} ./${projections_output[$i]}${j}_*.png")
    done
done

Затем я могу выполнить загрузку последовательно, как это

      for k in "${upload_elements[@]}"; do
   ncftpput -R ftp_server ${k}
done

Когда используешьparallelя используюcolsepчтобы разделить аргументы

      parallel -j 5 --colsep ' ' ncftpput -R ftp_server ::: "${upload_elements[@]}"

ноncftpputвыдает ошибку, которая говорит мне, что он не понимает структуру переданного аргумента. Что я делаю не так?

1 ответ

Пытаться:

      parallel -j 5 --colsep ' ' eval ncftpput -R ftp_server ::: "${upload_elements[@]}"

Это должно делать точно так же:

      for k in "${upload_elements[@]}"; do
   echo ncftpput -R ftp_server ${k}
done | parallel -j 5
Другие вопросы по тегам