scp nur bestimmte Dateien

scp nur bestimmte Dateien

Ich versuche, geänderte Dateien per SSH zu GoDaddy zu kopieren. GoDaddy ist schrecklich und erlaubt daher natürlich kein Rsync. Ich kann SCP verwenden, 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 per SCP kopieren könnte.

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

Gibt es eine Möglichkeit, mit scp alle Dateien mit der Erweiterung phprekursiv zu kopieren? So etwa:

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

ERWÜNSCHTES ERGEBNIS

//auf dem lokalen Rechner
$ finde ./Quelle

Quelle/1.php
Quelle/2.php
Quelle/Sub
Quelle/Sub/3.php
Quelle/Sub/4.php
Quelle/Sub/NICHT kopieren.txt
Quelle/Sub/NICHT kopieren.png
Quelle/Sub/Sub2
Quelle/sub/sub2/5.php
Quelle/sub/sub2/6.php

//Befehl zum Kopieren der Dateien
$ [scp-Befehl hier]

//auf Remote-Server
$ finde ./Ziel

Ziel/1.php
Ziel/2.php
Ziel/Sub
Ziel/sub/3.php
Ziel/sub/4.php
Ziel/Sub/Sub2
Ziel/sub/sub2/5.php
Ziel/sub/sub2/6.php

DAS FUNKTIONIERT NICHT

//auf dem lokalen Rechner
$ finde ./Quelle

Quelle/1.php
Quelle/2.php
Quelle/Sub
Quelle/Sub/3.php
Quelle/Sub/4.php
Quelle/Sub/NICHT kopieren.txt
Quelle/Sub/NICHT kopieren.png
Quelle/Sub/Sub2
Quelle/sub/sub2/5.php
Quelle/sub/sub2/6.php

//Befehl zum Kopieren der Dateien
$ cd Quelle; scp -r *.php Benutzer@Remote:/Ziel

//auf Remote-Server
$ finde ./Ziel

Ziel/1.php
Ziel/2.php

Vielleicht könnten wir auch versuchen, find zu verwenden, aber ich bin ziemlich sicher, dass dieswird so nicht funktionieren:

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

Das wird nicht funktionieren, da ich nicht glaube, dass Sie {}in „Find“ mehrere Operatoren verwenden können.

Außerdem kann es schwierig sein, die Pfade auf dem Remote-Server auszurichten, beispielsweise wenn „find“ zurückgegeben wurde /users/johndoe/documents/source/1.phpund Sie möchten, dass es auf dem Remote-Server landet /home/jane/www/destination/1.php.

Antwort1

Folgendes mache ich, wenn ein Host nur das Pushen von Inhalten zulässt, aber kein rsync:

  • Erstellen Sie auf Ihrem lokalen Computer ein „Schattenverzeichnis“, das der Zielstruktur ähnelt
  • Verwenden Sie es rsync, um in dieses Schattenverzeichnis zu pushen und die Ausgabe zu erfassen (dort ist sie verfügbar, --log-filewenn Sie sie per Skript ausführen möchten).
  • Bestimmen Sie aus der rsyncAusgabe die Dateien, die Sie löschen oder pushen müssen, und erstellen Sie eine Liste
  • vielleicht (hängt von der Art des Pushens ab): Erstelle ein Paket aus den Dateien, die nur geändert werden müssen
  • Starten Sie Ihr Push-Tool (ftp, scp, was auch immer) und lassen Sie es auf den Dateien aus der Liste laufen

Antwort2

Kannst du das nicht tun scp -r *.php destination?

Antwort3

scp -r Benutzer@IP:/Daten/Dateien/*.php /tmp/Dateien/

verwandte Informationen