サーバー上のいくつかのものをバックアップするためにcronを書いています。基本的に、scpを使用してローカルディレクトリから特定のファイルを送信しています。認証を回避するために公開鍵を使用しています。
再利用性のために、ローカル ディレクトリとサーバーの URL を引数で bash スクリプトに渡します。
パラメータの設定方法:
#!/bin/bash
DIR="$1"
URL="$2"
FILES="$DIR*.ext"
私の問題は、URLのフォーマットに関するものです。
フォーマットなし
ファイルをサーバーに送信する方法:
#!/bin/bash
for F in $FILEs
do
scp $F $URL;
if ssh $URL stat $(basename "$F")
then
rm $F
else
echo "Fails to copy $F to $URL"
fi
done
サーバー上のユーザーの自宅でコピーしようとすると、次のようになります。
$ ~/backup /path/to/local/folder/ user@server.com:
サーバー上の特定のディレクトリにコピーしようとすると、次のようになります。
$ ~/backup /path/to/local/folder/ user@server.com:/path/to/remote/folder/
いずれの場合も、よく知られているエラー (およびカスタム エコー) が表示されます。
ssh: Could not resolve hostname user@server.com: nodename nor [...]
Can't upload /path/to/local/folder/file.ext to user@server.com
とにかく動作します(ファイルがコピーされます)。しかし、それは解決策ではありません.scpが失敗すると(そう思われる)、ファイルが削除されることはありません。
フォーマットあり
この方法を使用してファイルを送信しようとしました:
#!/bin/bash
for F in $FILES
do
scp $F "$URL:"
done
エラーが発生しなくなり、ユーザーのホームディレクトリにコピーしてからローカルファイルを削除することができます:
$ ~/backup /path/to/local/folder/ user@server.com
しかし、もちろん、特定のディレクトリへの送信はまったく機能しません。
ついに
したがって、最初の方法の方が適切だと思いますが、どうすればそのエラーを取り除くことができますか?