我正在运行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
首先,检查目录是否存在(如果不尝试的话,我不使用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
我已经尝试过:
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
。