【问题标题】:Script to create directory and subdirectory in sftp在 sftp 中创建目录和子目录的脚本
【发布时间】:2020-02-04 15:24:31
【问题描述】:

我正在运行一个 Bash 脚本来将文件上传到 sftp 位置。但是,在上传文件之前,我需要检查 sftp 目录和子目录是否存在。如果存在,则上传文件,如果不存在,则创建目录和子目录,然后上传文件。我怎样才能做到这一点?

mkdir -p 在 sftp 中不起作用。不幸的是,ssh 访问被禁用。我试过这个:

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

【问题讨论】:

  • 您可能想要使用更好的客户端。调查lftp

标签: bash shell sftp


【解决方案1】:

首先,检查目录是否存在,如果不试试这个,我不知道它会如何使用 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

【讨论】:

    【解决方案2】:

    我试过这个:

    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 /文件3。也许你的意思是cd /file1 \n mkdir file2 \n mkdir file2/file3 \n cd file2/file3 \n
    • $I_file.zip - 你有一个大写的 I 而不是小写的 i 括号:${i}_file.zip

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2010-10-20
      • 2014-11-22
      • 2014-05-19
      • 2020-05-11
      相关资源
      最近更新 更多