Ist es mit SCP möglich, nur Dateien zu kopieren, die einem bestimmten Datum entsprechen?

7

Ist es möglich, dass SCP die kopierten Dateien nach Datum filtert, z. B. wenn Sie alle am 29.12. Erstellten Dateien kopieren und die anderen ignorieren möchten?

eichoa3I
quelle

Antworten:

5

Das kann man nicht direkt mit machen scp. Der Unix-Weg ist, Werkzeuge zu kombinieren, die Sie den findBefehl wollen .

Hier ist ein Beispiel für die Suche nach einer Datei mit einem bestimmten Datum:

touch --date "2007-01-01" start
touch --date "2008-01-01" end
find -type f -newer start -not -newer end

Ich habe dieses Beispiel hier entnommen : http://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/

Um dies in scp einzuspeisen, können Sie dies tun:

find -type f -newer start -not -newer end -exec scp {} dest: \;

Dadurch wird scp einmal pro Datei aufgerufen. Dies kann langsam sein, da die Verbindung jedes Mal hergestellt werden muss. Wenn Sie nur eine Handvoll Dateien haben und die Namen keine Leerzeichen enthalten, können Sie dies tun:

scp `find -type f -newer start -not -newer end` dest:
Edward Betts
quelle
1
Wenn Sie Dateien vom Client auf den Server kopieren, ist das ganz einfach. Wie sieht es aber anders herum aus?
Petr Peller
2
@PetrPeller Um in die entgegengesetzte Richtung zu kopieren, können Sie dies tun:scp dest:`ssh dest find -type f -newer start -not -newer end` .
Edward Betts
0

Hier wird eine effektive (einzeilige!) Alternative (von @sudodus) angegeben, die mit 'cpio' im Auskopiermodus über einen SSH-Kanal kopiert. Sie können die Suchargumente nach Bedarf anpassen, z. B. mithilfe der Tests time / min / newer.

Um Ihren genauen Datums- und Uhrzeit-Test zu erhalten, erstellen Sie auf Ihrem Quellsystem eine Dummy-Datei mit der korrekten Uhrzeit und dem korrekten Datum. Verwenden Sie den Test find -newer oder den Test -newerXY auf der Manpage. Siehe https://linux.die.net/man/1/find

Die Ausgabe des Befehls find, der auf dem fernen System ausgeführt wird, wird sicher über ssh an das lokale System zurückgeleitet und gespeichert.

Es scheint alles zu tun, was Sie benötigen, verwendet jedoch nicht 'scp' - was sich auf Ihre Kennzeichnung auswirken könnte. Es wird jedoch eine Kombination von Unix-Tools verwendet - dies ist der Unix-Ansatz!

In jedem Fall ist scp eine Abkürzung für die häufigsten Fälle. Dieser Ansatz ist leistungsfähiger, wenn das Filtern von Dateien erforderlich ist.

ssh username@ip-adress '(cd /path/to/sourcedir; find . -print | cpio -oBav -Hcrc)' | ( cd /path/to/targetdir && cpio -ivumd )

https://askubuntu.com/questions/1080590/how-to-use-find-in-scp-command

MikeW
quelle