1

ファイルを ftp するために Bash FTP コマンドを使用していますが、2 フォルダーを超える深さのディレクトリを作成しようとすると問題が発生します。2 つの深さのフォルダーを使用すると機能しますが、3 つの深さのフォルダーに移動すると失敗します。例えば:

mkdir foo/bar - this works
mkdir foo/bar/baz - this fails

私もこれを試しました:

mkdir -p foo/bar/baz - which didn't work, it ended up creating a '-p' directory

私が実行しようとしているシェル スクリプトは実際には非常に単純ですが、ご覧のとおり、ディレクトリ構造は 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
4

2 に答える 2

12

ftp の下の mkdir は、/bin/mkdir を呼び出すことによってではなく、ftp サーバーによって実装されます。-p などのオプションはありません。

mkdir foo
cd foo
mkdir bar
cd bar
mkdir baz
cd baz

元の構造が必要な場合は、次のようにすることもできます。

#!/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
于 2012-07-19T03:54:52.963 に答える
1

代わりに lftp を試してください:

[dong@idc1-server1 ~]$ lftp sftp://idc1-server2
lftp idc1-server2:~> ls
drwxr-xr-x    3 dong     dong         4096 Jun 16 09:11 .
drwxr-xr-x   18 root     root         4096 Apr  1 22:25 ..
-rw-------    1 dong     dong          116 Jun 16 09:28 .bash_history
-rw-r--r--    1 dong     dong           18 Oct 16  2013 .bash_logout
-rw-r--r--    1 dong     dong          176 Oct 16  2013 .bash_profile
-rw-r--r--    1 dong     dong          124 Oct 16  2013 .bashrc
drwx------    2 dong     dong         4096 Jul 24  2014 .ssh

lftp idc1-server2:~> mkdir a/b/c/d
mkdir: Access failed: No such file (a/b/c/d)

lftp idc1-server2:~> mkdir -p a/b/c/d
mkdir ok, `a/b/c/d' created
于 2015-06-16T09:32:02.123 に答える