Verwenden Sie find mit scp oder rsync, um gefundene Dateien zu senden

Verwenden Sie find mit scp oder rsync, um gefundene Dateien zu senden

Ich versuche, einen einfachen Befehl auszuführen, der nach einem bestimmten Dateityp sucht und, sobald er gefunden wurde, die Datei- und Verzeichnisstruktur auf einen Remote-Server kopiert.

Zum Beispiel:

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

In diesem Fall nimmt es die gefundene Datei und kopiert sie in ein separates Verzeichnis mit der übergeordneten Ordnerstruktur. Ich möchte dasselbe entweder mit rsync oder scp tun.

Ich habe versucht, den unten stehenden Code zu ändern, aber ohne Erfolg.

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

Wir sind für jede Hilfe dankbar.

Ich bin gerade dabei, Familienfotos aus mehreren Jahren zu sortieren. Anstatt sie in einem Verzeichnis auf meinem ZFS-Array zu suchen und sie an einen anderen Ort auf demselben Array umzuschreiben (was Zeit kostet), möchte ich sie lieber finden und an eine separate Maschine senden, wo sie nach Typ sortiert, durchsucht und fdupesdann phockupnach Datum sortiert werden. Ich mache es so, damit ich die Originaldateien sicher und unversehrt habe, falls ich es vermassle.

Edit: Ich möchte den Leuten danken, die auf meine Frage geantwortet haben. Glücklicherweise habe ich eine Lösung gefunden, bevor Sie geantwortet haben. Leider habe ich nicht daran gedacht, wie langsam die Lösung sein würde. Also habe ich mich dafür entschieden, es einfach so zu machen, wie ich es vorher gemacht hatte.

Das war der Code, der bei mir funktioniert hat. Allerdings waren einige SSH-Schlüsselübergaben erforderlich, damit es richtig funktionierte, sodass ich nicht für jede Datei das Passwort eingeben musste.

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

Ich werde einige der anderen genannten Empfehlungen ausprobieren und sehen, ob sie schneller sind, aber so wie es aussieht, habe ich letztendlich nur ein Shell-Skript erstellt, das im Hintergrund läuft.

Danke noch einmal!

Antwort1

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

Entfernen Sie es --dry-run, wenn Sie mit dem geplanten Vorgehen zufrieden sind.

Antwort2

Den folgenden Befehl können wir verwenden

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

verwandte Informationen