53

これが可能かどうかはわかりません。基本的に、私は自分のホスティングにファイルをscpできるようにするスクリプトを書いています。ここまでです。引数 1 はファイルで、引数 2 はリモート サーバーに配置するフォルダーです。

function upload {
    scp $1 myusername@ssh.myhost.net:$2
}

ご存じないかもしれませんが、関数を呼び出すときに指定したディレクトリが存在しない場合、転送は失敗します。関数にディレクトリが存在するかどうかを確認し、存在しない場合は作成する方法はありますか。

毎回 ssh してディレクトリを作成する必要はありませんが、選択の余地がない場合は、選択の余地がありません。

4

6 に答える 6

35

使用できますrsync

例えば、

rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO

についての注意rsync:

rsyncファイルとディレクトリをある場所から別の場所に同期する、Unix 用のユーティリティ ソフトウェアおよびネットワーク プロトコルです。rsync他のツールよりも高速なアルゴリズムを使用して、必要に応じてデルタ エンコーディングを使用することで、データ転送サイズを最小限に抑えます。

于 2009-08-27T10:12:30.590 に答える
25

sshでパスワードまたは公開鍵が必要なため、完全に使用したくないというよりも、手動で対話的にログインしてディレクトリを作成したくないという意味だと思いますscp

ssh を非対話的に使用できる場合は、catoverを使用してファイルをストリーミングできsshます。

cat $1 | ssh $2 "mkdir $3;cat >> $3/$1"

どこ

$1 = filename 
$2 = user@server
$3 = dir_on_server

ディレクトリが既に存在する場合、mkdirエラーが発生しますが、ファイルは引き続きコピーされます。既存のディレクトリは上書きされません。ディレクトリが存在しない場合mkdirは作成します。

于 2009-08-27T10:39:45.340 に答える
19

再帰的な scp (-r) を実行すると、ディレクトリもコピーされます。そのため、ローカルのリモート ホストに目的の名前のディレクトリを作成し、そこにファイルをコピーしてから再帰的にコピーすると、そのファイルを含むディレクトリが作成されます。

ちょっと厄介ですが、それは仕事をするでしょう.

于 2009-08-27T10:09:29.253 に答える
13

これは 2 段階のプロセスです

ssh myusername@ssh.myhost.net "mkdir -p $2"

これにより、ディレクトリ構造が作成されます。次に、コピーします

scp $1 myusername@ssh.myhost.net:$2
于 2013-07-24T05:04:43.093 に答える
6

たとえば、
ssh remote_user@remote.host '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt remote_user@remote.host:/tmp/nonexist/dir

于 2011-07-08T12:59:42.130 に答える