以下の厄介なrsync式を単純化する方法についてのアイデアはありますか?

以下の厄介なrsync式を単純化する方法についてのアイデアはありますか?

これは表現です:

rsync -avz --progress -e "ssh -i /where/is/my/id_dsa" [email protected]:`ssh -i /where/is/my/id_dsa  [email protected] "find /remote/source/dir -type f -name '*.sql' | sort -nr | head -1"` .

リモートホストで新しいSQLファイルを見つけます。 所有者存在する/リモート/ソース/ディレクトリユーザーとビベック localhostの現在のディレクトリにコピーされると、/where/is/my/id_dsaキーsshrsync認証が使用されます。

それで、このバックティックはssh -i ...私を怖がらせます。しかし、必要なファイルを見つける他の方法はありません。どのように単純化できますか?

ベストアンサー1

.ssh/config に次の設定を追加すると、コマンドを簡素化できます。

    .hostをホストします。
        ID ファイル/場所/is/my/id_dsa
        ユーザー Vivek

今コマンドは簡単です

rsync -avz --progress -e "ssh some.host:`ssh some.host "find /remote/source/dir -type f -name '*.sql' | sort -nr | head -1"` .

通常、私は "P"オプションが短い --progress の代わりに --partial --progress を好むので、コマンドは次のようになります。

rsync -avzPe "ssh some.host:`ssh some.host "find /remote/source/dir -type f -name '*.sql' | sort -nr | head -1"` .

以前に転送したすべてのSQLファイルを現在のディレクトリに保持している場合、rsyncは比較操作を実行し、既存のファイルを再送信しないため、転送するファイルを選択する必要はありません。したがって、コマンドを次のようにさらに簡素化できます。

rsync -avzPe "ssh some.host:`ssh some.host "find /remote/source/dir -type f -name '*.sql'"` .

最後に、コマンドでrsyncのフィルタリングルールを使用できます。

rsync -avzP some.host:/remote/source/dir/**/*.sql .

サブディレクトリ構造が削除されるため、上記のコマンドを使用するときは注意してください。まず、--dry-runを使って実行してみてください。また、単一の":"がrsyncに代わりにsshを使用するように自動的に指示するため、-e ssh blahは必要ありません。これがお客様の要件を満たしていない場合はお知らせください。

乾杯!

おすすめ記事