私は/tmp/
時々私のディレクトリをスキャンして最後にこれを行った後、どのファイルが変更されたかを確認したいと思います。変更されたすべてのファイルは、ディレクトリ構造を維持しながらバックアップとしてリモートサーバーにコピーする必要があります。似たようなことを試しましたが、Ubuntuでは正しく動作しません。Permission denied (publickey).
#!/bin/bash
TARGET=/bkp
[email protected]
SOURCE=/tmp
touch $TARGET/last_sync
rsync \
-ahrv \
--update \
-e \
--files-from=<ssh -i /home/ubuntu/ssh_key.pem $HOST "find $SOURCE -type f -newer $SOURCE/last_sync -exec realpath --relative-to=$SOURCE '{}' \;" \
$HOST:$SOURCE \
$TARGET
rsync -ahv $TARGET/last_sync $HOST:$SOURCE
私の計画は、元のコンピュータにインストールすることです。
ubuntu@source:~/$ tree /tmp
.
├── file1.txt
├── dir1
│ ├── subdir1
│ │ └── file3.txt
│ └── file2.txt
├── file4.txt
初めて実行すると、以下のようにリモートコンピュータにコピーする必要があります。
ubuntu@remote:~/$ tree /bkp
.
├── file1.txt
├── dir1
│ ├── subdir1
│ │ └── file3.txt
│ └── file2.txt
├── file4.txt
数時間後、/tmp/dir1/file5.txt
新しいファイルが追加され、/tmp/file4.txt
ファイルが変更されました。
スクリプトを実行したら、リモートで同期する必要があります(2つのファイルが追加されました)。
ubuntu@remote:~/$ tree /bkp
.
├── file1.txt
├── dir1
│ ├── subdir1
│ │ └── file3.txt
│ └── file2.txt
| | -- file5.txt <-- ADDED
├── file4.txt <-- ADDED (replaced)
私はmacos -> ubuntuで同様のことを達成できましたが、scpとより多くの「ロジック」を使用して過去N時間に変更されたファイルをチェックし、N時間ごとにスクリプトを実行しました。
答え1
Permission denied (publickey)
最大の問題はエラーが発生しているようです。これは、証明書ベースの認証を使用するときに発生する一般的な認証の問題ですssh
。 3回呼び出しますssh
が、デフォルトではなく個人証明書(キー)を1回だけ提供するコードを見てください。
rsync
アップデートの実行ssh
find
最新のファイルを見つけるために呼び出されましたrsync
同期ビーコンファイルのコピー
この接続に使用するのに適したキーであれば、毎回参照する必要があり/home/ubuntu/ssh_key.pem
ます。
2番目の問題は、ほとんどのコードで構文が本当に間違っているように見えることです。私はコードを渡すためにServerFaultに関する私のアドバイスを受け入れたと思います。https://shellcheck.net/bash
しかし、今私はコードを解析することができますが、まだ構文的に間違った部分があります。例えば、
rsync \ -ahrv \ --update \ -e \ --files-from=<ssh -i /home/ubuntu/ssh_key.pem $HOST "find $SOURCE -type f -newer $SOURCE/last_sync -exec realpath --relative-to=$SOURCE '{}' \;" \ $HOST:$SOURCE \ $TARGET
パラメータ付きのオプションが一緒にリンクされるように再構築すると、次の結果が得られます。
rsync \
-ahrv \
--update \
-e --files-from=
-i \
/home/ubuntu/ssh_key.pem $HOST "find $SOURCE -type f -newer $SOURCE/last_sync -exec realpath --relative-to=$SOURCE '{}' \;" $HOST:$SOURCE $TARGET
<ssh
ssh
読み取れるファイルがありません。標準入力、そして何も処理できません--files-from=
参照されたコマンドは-e
存在しません。- 4つのソースファイル/ディレクトリがコピーされます
$TARGET
(残りのコマンドが機能している場合)。
rsync
私はあなたが達成したいものが何であるかを知ることができると思いますが、なぜ通常の動作モードで使用し、ファイルを直接コピーしないのか完全にはわかりません。不要find
。ビーコンファイルを同期する必要はありません。
#!/bin/bash
[email protected]
source=/path/to/source
target=/bkp
rsync -av -e 'ssh -i /home/ubuntu/ssh_key.pem' "$rhost:$source/" "$target"