Загрузка файлов с сервера sftp с подстановочным знаком и в цикле - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь загрузить кучу файлов с сервера sftp. Организация сервера следующая: существует папка в год, а в каждой годовой папке - папка в день. Каждый день есть 8 файлов, оканчивающихся на .nc, которые я хочу скачать. Сами имена файлов слишком сумасшедшие, чтобы их отслеживать. Я пробовал несколько разных подходов, но мне не удалось дать get правильные инструкции для получения файлов. Моя текущая версия должна иметь цикл перед подключением к sftp, чтобы я мог написать имя, а затем подключиться к sftp и скачать этот файл:

for i in `seq 1 1 366`;
        do
            if [ $i -lt 10 ]; then
                today='00$i/*.nc' 
            elif [ $i -ge 10 ] && [ $i -lt 100 ]; then
                today= '0$i/*.nc' 
            elif [ $i -ge 100 ]; then
                today= '$i/*.nc' 
            fi
        done

sshpass -p $(cat ~/Code/sftp_passwd.txt) sftp cgerlein@cygnss-sftp-1.engin.umich.edu <<EOF

cd ..
cd ..
cd /data/cygnss/products/CDR/l1/2019/

get $today /scratch/myfolder/ 
quit
EOF

Я не думаю, что get нравитсяподстановочный знак там. И это может быть даже не лучшим подходом. Какие-либо предложения? Спасибо!

1 Ответ

2 голосов
/ 11 октября 2019

Вы можете использовать printf() для форматирования имени файла с ведущими нулями.

Команда sftp должна находиться внутри цикла.

После * не должно быть пробела1007 *.

Нет необходимости в cd .. перед изменением на абсолютный путь.

for i in {1..366}
do
    today=$(printf "%03d/*.nc" $i)
    sshpass -p $(cat ~/Code/sftp_passwd.txt) sftp cgerlein@cygnss-sftp-1.engin.umich.edu <<EOF
cd /data/cygnss/products/CDR/l1/2019/
get $today /scratch/myfolder/ 
quit
EOF
done

Кстати, вы можете выполнять подстановочные символы с помощью curl, см. загрузка всехфайлы в каталоге с cURL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...