scp nur bestimmte Dateien


4

Ich versuche, geänderte Dateien per ssh nach godaddy zu kopieren. Godaddy ist schrecklich und erlaubt daher natürlich kein Rsync. Ich kann scp benutzen, aber ich möchte wirklich nur geänderte Dateien kopieren. Ich glaube nicht, dass das möglich ist, also habe ich mich gefragt, ob ich vielleicht nur alle PHP-Dateien scp können.

Es gibt jedoch viele Unterverzeichnisse, sodass ich die Option -r verwenden muss.

Gibt es eine Möglichkeit, mit scp alle Dateien mit der Erweiterung zu kopieren? php, rekursiv? so was:

scp -r -name "*php" /local/html/ user@server:/home/html/ (funktioniert nicht)

ERWÜNSCHTES ERGEBNIS

//on local machine
 $ find ./source  source / 1.php
source / 2.php
Quelle / Sub
source / sub / 3.php
source / sub / 4.php
source / sub / DONT-copy.txt
source / sub / DONT-copy.png
Quelle / Unter / 2
source / sub /₂ / 5.php
source / sub /₂ / 6.php

// Befehl zum Kopieren der Dateien  $ [scp Befehl hier]  // auf dem entfernten Server  $ find ./destination  Bestimmungsort / 1.php
Ziel / 2.php
Ziel / Sub
Ziel / Unter / 3.php
Ziel / Unter / 4.php
Ziel / Unter / 2
Ziel / Unter / 2 / 5.php
Ziel / Unter / 2 / 6.php 

DAS FUNKTIONIERT NICHT

//on local machine
 $ find ./source  source / 1.php
source / 2.php
Quelle / Sub
source / sub / 3.php
source / sub / 4.php
source / sub / DONT-copy.txt
source / sub / DONT-copy.png
Quelle / Unter / 2
source / sub /₂ / 5.php
source / sub /₂ / 6.php

// Befehl zum Kopieren der Dateien  $ cd source; scp -r * .php user @ remote: / destination  // auf dem entfernten Server  $ find ./destination  Bestimmungsort / 1.php
Ziel / 2.php 

Vielleicht könnten wir auch versuchen, find zu verwenden, aber ich bin mir ziemlich sicher, dass dies so ist wird nicht so funktionieren wie es ist :

find ./source -name "*.php" -exec scp {} user@remote:{} \;

Das wird nicht funktionieren, weil ich nicht denke, dass Sie mehrere verwenden können {} Betreiber in zu finden.

Es kann auch schwierig sein, die Pfade auf dem Remote-Server in eine Linie zu bringen, wenn beispielsweise find zurückkehrt /users/johndoe/documents/source/1.php und du wolltest, dass es am ende ist /home/jane/www/destination/1.php auf dem Remote-Server.


2
Ist es möglich, dass Sie einen Befehl (über ssh) auf dem Remote-Server ausführen? In diesem Fall können Sie die Dateien lokal tarieren und a cat phpfiles.tar | ssh user@remote "cd destination && tar cf -" um alle Dateien in einem Durchgang zu übertragen.
mpy

Haben Sie Ihren letzten Suchbefehl tatsächlich mit mehreren versucht? {} Token? Ich sehe vielversprechend aus können Verwenden Sie mehrere {} ), müssen Sie möglicherweise angeben user@remote:~/{} als Bestimmungsort.
mpy

Ups, diese Frage war vor fast zwei Jahren ... Ich frage mich, warum sie jetzt oben auf den Fragen stand ...
mpy

Antworten:


2

Folgendes kann ich tun, wenn ein Host nur das Pushen von Inhalten und kein Rsync zulässt:

  • Erstellen Sie ein "Schatten" -Verzeichnis auf Ihrem lokalen Computer, das dem ähnelt Zielstruktur
  • benutzen rsync in dieses Schattenverzeichnis zu verschieben und Erfassen Sie die Ausgabe (gibt es --log-file wenn du es schreiben willst)
  • von dem rsync bestimmen Sie die zu löschenden Dateien oder drücke und mache eine Liste
  • Vielleicht (hängt von der Art und Weise ab, wie Sie pushen): Erstellen Sie ein Paket aus den Dateien, die nur geändert werden müssen
  • Starten Sie Ihr Push Tool - FTP, SCP, was auch immer - und Lass es auf den Dateien aus der Liste laufen

0

Kannst du nicht machen scp -r *.php destination ?


Aber kopiert das auch alle * .php-Dateien in Unterverzeichnisse?
cwd

@cwd: Was ist Ihre genaue Anforderung?
hari

hat die Frage aktualisiert
cwd

Ich bin mir immer noch nicht sicher, was Sie hier fragen. Von welchen Dateien möchten Sie kopieren? /local/html? alle * .php Dateien? nur geändert *.php Dateien? was macht argument -name bedeuten?
hari

-name ist der Parameter, mit dem rsync nur PHP-Dateien filtert. Ich möchte idealerweise nur geänderte Dateien kopieren (wie Rsync), aber da Rsync nicht verfügbar ist, möchte ich nur PHP-Dateien kopieren (um Bandbreite zu sparen). Ist das sinnvoll? Ich schätze, ich könnte eine machen find -exec scp Befehl, aber ich müsste den Basispfad ergreifen und sicherstellen, dass das Zielargument auch hinzugefügt wird. Es scheint nur, dass es einen einfachen Weg geben sollte, dies zu tun.
cwd

-1

scp -r user @ ip: / data / files / * .php / tmp / files /

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.