web-dev-qa-db-ja.com

見つかったファイルを送信するには、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を実行して日付順に並べ替えます。私が失敗した場合に備えて、この方法でこれを行っています。origファイルを安全で健全な状態にします。

編集:私の質問に答えたpplに感謝します。幸い、あなたが答える前に解決策を見つけましたが、残念ながら、解決策がどれほど遅いかについては考えていませんでした。それで、私は以前と同じようにそれを行うことを選びました。

これは私のために働いたコードでした。それが適切に機能するためにいくつかのsshキーハンドオフが必要だったので、すべてのファイルにパスワードを入力する必要はありませんでした。

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

言及された他の推奨事項をいくつか試して、それらがより速いかどうかを確認しますが、現状では、バックグラウンドで実行されるシェルスクリプトを作成するだけになりました。

再度、感謝します!

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

削除する --dry-run計画に満足している場合。

1
roaima

以下で使用できるコマンド

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