FTP Shell脚本mkdir问题

dav*_*990 1 ftp bash

我使用Bash FTP命令来ftp文件,但是我有一个问题,我尝试创建一个超过2个文件夹深度的目录.如果我使用两个文件夹深,但是如果我深入三个文件夹,那么它会失败.例如:

mkdir foo/bar - this works
mkdir foo/bar/baz - this fails
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

mkdir -p foo/bar/baz - which didn't work, it ended up creating a '-p' directory
Run Code Online (Sandbox Code Playgroud)

我试图运行的shell脚本实际上非常简单但是你可以看到目录结构是3个文件夹深,它无法创建所需的文件夹:

#!/bin/bash
DIRECTORY="foo/bar/baz"
FILE="test.pdf"         
HOST="testserver"           
USER="test"         
PASS="test"         

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASS
mkdir $DIRECTORY
cd $DIRECTORY
binary
put $FILE
quit
END_SCRIPT
Run Code Online (Sandbox Code Playgroud)

piz*_*zza 12

ftp下的mkdir是由ftp服务器实现的,而不是通过调用/ bin/mkdir没有像-p这样的选项,你应该做的是

mkdir foo
cd foo
mkdir bar
cd bar
mkdir baz
cd baz
Run Code Online (Sandbox Code Playgroud)

如果您仍然需要原始构造,也可以这样做:

#!/bin/bash
foo() {
    local r
    local a
    r="$@"
    while [[ "$r" != "$a" ]] ; do
        a=${r%%/*}
        echo "mkdir $a"
        echo "cd $a"
        r=${r#*/}
    done
}
DIRECTORY="foo/bar/baz"
FILE="test.pdf"         
HOST="testserver"           
USER="test"         
PASS="test"         

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASS
$(foo "$DIRECTORY")
binary
put $FILE
quit
END_SCRIPT
Run Code Online (Sandbox Code Playgroud)