scpまたはrsyncでfindを使用して見つかったファイルを送信する

scpまたはrsyncでfindを使用して見つかったファイルを送信する

特殊なファイル形式を検索して見つけたら、そのファイルとディレクトリ構造をリモートサーバーにコピーする簡単なコマンドを実行しようとします。

たとえば、

find Source/ -name *.CR2 | xargs -d '\n' cp --parents -t /STORAGE/location/ 

この場合、見つかったファイルを親フォルダ構造を持つ別のディレクトリにコピーします。 rsyncまたはscpを使って同じことをしたいと思います。

私は成功しなかったので、以下のコードを使用していくつかの主張を試しました。

find /src/dir/ -name *.CR2 -printf %P\\0 \ | rsync -av -e ssh --files-from=- --from0 /src/dir/ remote@server:/Storage/

どんな助けでも大変感謝します。

私は何年もの家族の写真を並べ替えていますが、zfs配列の1つのディレクトリで写真を見つけて同じ配列の別の場所に書き換えるのではなく(時間がかかります)、その写真を見つけて次に送信したいと思います。別々のマシンが種類別に並べ替え、繰り返し、次に繰り返してfdupes日付phockup別に並べ替えます。間違えた場合に備えて、元のファイルを安全に保管するためにこれを行います。

編集:私の質問に答えてくださった方に感謝の言葉を伝えたいと思います。幸いなことに、あなたが答える前に解決策を見つけましたが、残念ながら解決策がどれほど遅いかわかりませんでした。それで、以前にやったやり方でやることにしました。

これは私に合ったコードです。正しく機能するにはSSHキーハンドオーバーが必要ですが、各ファイルにパスワードを入力する必要はありません。

find Sorted/ -name *.JPG -exec rsync -a -e ssh --relative '{}' usr@remote:/1/2/3/ ';'

上記の他の提案のいくつかを試して、より速いことを確認したいと思います。しかし、現在の状態では、バックグラウンドで実行されるシェルスクリプトの作成で終わりました。

もう一度ありがとうございます!

答え1

find Source/ -type f -name '*.CR2' -print0 |
    rsync --dry-run -av --files-from - --from0 . remote@server:/Storage/

--dry-run計画した作業が満足のいくものであれば削除してください。

答え2

次のコマンドを使用できます

 find  path -type f -iname "filename" -exec scp {} destinationhost:/var/tmp/ \;

関連情報