これが可能かどうかはわかりません。基本的に、ホスティングにファイルを scp できるスクリプトを書いています。これで終わりです。引数1はファイルで、引数2はリモートサーバーに配置するフォルダーです。
function upload {
scp $1 [email protected]:$2
}
ご存じかもしれませんが、関数を呼び出すときに指定したディレクトリが存在しない場合、転送は失敗します。関数にディレクトリが存在するかどうかを確認し、存在しない場合は作成する方法はありますか。
毎回sshしてディレクトリを作成する必要はありませんが、選択の余地がない場合は選択の余地がありません。
Rsyncを使用できます。
例えば、
rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO
Rsyncに関する注意:
rsyncは、他のツールよりも高速なrsyncアルゴリズムを使用して適切な場合にデルタエンコーディングを使用することにより、データ転送を最小限に抑えながら、ある場所から別の場所にファイルとディレクトリを同期するUnix用のユーティリティソフトウェアおよびネットワークプロトコルです。
ssh
を含むパスワードまたは公開鍵が必要なため、scp
を完全に使用することを避けたいのではなく、手動でディレクトリに手動でログインしてディレクトリを作成したくないと思います。
Sshを非対話的に使用することが許容される場合、cat
over ssh
を使用してファイルをストリーミングできます。
cat $1 | ssh $2 "mkdir $3;cat >> $3/$1"
どこで
$1 = filename
$2 = user@server
$3 = dir_on_server
ディレクトリがすでに存在する場合、mkdir
はエラーを出しますが、ファイルはまだコピーされます。 既存のディレクトリは上書きされません。ディレクトリが存在しない場合、mkdir
が作成します。
再帰scp(-r)を実行すると、ディレクトリもコピーされます。したがって、リモートホスト上で希望する名前のディレクトリをローカルに作成し、その中にファイルをコピーしてから、再帰的にコピーすると、そのファイルを含むディレクトリが作成されます。
ちょっと厄介ですが、それは仕事をするでしょう。
これは2段階のプロセスです
ssh [email protected] "mkdir -p $2"
これにより、ディレクトリ構造が作成されます。次に、コピーします
scp $1 [email protected]:$2
たとえば、ssh [email protected] '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt [email protected]:/tmp/nonexist/dir
sshfs
派手に!
例.ssh/config
Host your-Host
HostHame example.com
User name
IdentitiesOnly yes
IdentityFile ~/.ssh/private_key
上記以外のローカルセットアップには、targetマウントポイントのみが必要です...
Sudo mkdir /media/your-Host
Sudo chown ${USER}:${USER} /media/your-Host
...その後、スクリプトのマウントやアンマウントなどがはるかに簡単になります。
マウント
sshfs your-Host:within-home/some-dir /media/your-Host
アンマウント
fusermount -u /media/your-Host
サーバーで許可されている場合、このアプローチの最大の利点は、ローカルで実行されているスクリプトがリモートファイルシステムと対話できることです。ということは...
if ! [ -d "/media/your-Host/nowhere" ]; then
mkdir -vp "/media/your-Host/nowhere"
fi
...そのような実装の魔法を介して実行できる他の多くのトリックの中で可能になります。