Est-il possible avec SCP de ne copier que les fichiers correspondant à une date donnée?

7

Est-il possible de faire filtrer par SCP les fichiers qu'il copie par date, par exemple si vous souhaitez copier tous les fichiers créés le 12/29 et ignorer les autres?

eichoa3I
la source

Réponses:

5

Vous ne pouvez pas faire cela directement avec scp. La manière unix est de combiner des outils, vous voulez la findcommande.

Voici un exemple de recherche d'un fichier avec une date donnée:

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

J'ai pris cet exemple ici: http://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/

Pour alimenter ceci dans scp, vous pouvez faire ceci:

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

Cela appellera scp une fois par fichier, ce qui pourrait être lent car il doit établir la connexion à chaque fois. Si vous ne possédez qu'une poignée de fichiers et qu'il n'y a pas d'espace dans les noms, vous pouvez le faire:

scp `find -type f -newer start -not -newer end` dest:
Edward Betts
la source
1
C'est facile lorsque vous copiez des fichiers d'un client à un autre, mais qu'en est-il de l'inverse?
Petr Peller
2
@PetrPeller Pour copier dans le sens opposé, vous pouvez le faire:scp dest:`ssh dest find -type f -newer start -not -newer end` .
Edward Betts
0

Une alternative efficace (une ligne!) (Par @sudodus) est donnée ici, qui copie via un canal SSH en utilisant 'cpio' en mode copie. Vous pouvez personnaliser les arguments de recherche selon vos besoins, en utilisant éventuellement les tests time / min / new.

Pour obtenir votre test de date et heure exacts, créez un fichier fictif avec la date et l'heure correctes sur votre système source, utilisez le test find -newer ou le test -newerXY de la page de manuel. Voir https://linux.die.net/man/1/find

La sortie de la commande de recherche en cours d'exécution sur le système distant est renvoyée de manière sécurisée au système local via ssh, puis enregistrée.

Il semble faire tout ce dont vous avez besoin, mais n'utilise pas 'scp' - ce qui pourrait affecter votre marquage. Mais il utilise une combinaison d'outils Unix - qui est l'approche Unix!

Dans tous les cas, scp est un raccourci pour les cas les plus courants, cette approche est plus puissante, lorsque le filtrage des fichiers est requis.

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
la source