Скрипт для создания каталога и подкаталога в sftp - PullRequest
1 голос
/ 04 февраля 2020

Я запускаю сценарий Bash для загрузки файла в папку sftp. Однако перед загрузкой файла мне нужно проверить, существуют ли каталог и подкаталоги sftp или нет. Если они существуют, загрузите файл, если нет, то создайте каталог и подкаталоги, а затем загрузите файл. Как мне этого добиться?

mkdir -p не работает в sftp. К сожалению, доступ s sh отключен. Я пробовал это:

for i in `ls -1t | head -1`
do
        echo $i
        zip -r $i_file.zip $i
        sleep 2
        sshpass -p "passowrd" sftp -oPort=22 username@sftpserver <<< $'cd /file \n mkdir file1/file2/file3 \n cd /file1/file2/file3 \n put '$I_file.zip''
done

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Я пробовал это:

for i in `ls -1t | head -1`
do
        echo $i
        zip -r $i_file.zip $i
        sleep 2
        sshpass -p "passowrd" sftp -oPort=22 username@sftpserver <<< $'cd /file \n mkdir file1/file2/file3 \n cd /file1/file2/file3 \n put '$I_file.zip''
done
  • $i_file.zip - Если идентификаторы символов должны быть добавлены к расширению переменной, имя должно быть принято : ${i}_file.zip.
  • cd /file \n mkdir file1/file2/file3 \n cd /file1/file2/file3 \n - Вы изменяете на / file , (пытаетесь) создать / file / file1 / file2 / file3 и затем пытаетесь изменить на / file1 / file2 / file3 . Возможно, вы имели в виду cd /file1 \n mkdir file2 \n mkdir file2/file3 \n cd file2/file3 \n.
  • $I_file.zip - у вас есть заглавная буква I вместо строчных i в скобках: ${i}_file.zip.
0 голосов
/ 04 февраля 2020

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

#!/bin/bash
path="$1"
if [ ! -d "$path" ]
then
    IFS='/' # space is set as delimiter
    read -ra ADDR <<< "$path" # str is read into an array as tokens separated by IFS'
    cdir="$PWD"
    for i in "${ADDR[@]}"; do # access each element of array
        cdir+="/$i"
        mkdir "$cdir"
    done
fi
...