gulp expect rsync Datei Aktualisierung Server Hochladen

Skript zum automatischen Hochladen von Dateien auf den Server bei Aktualisierung mit gulp, expect und rsync

Ein Programm erstellt, das Dateien automatisch auf den Server hochlädt, wenn sie mit gulp, expect und rsync aktualisiert werden.

Shou Arisaka
3 Min. Lesezeit
6. Okt. 2025

Diesmal werden wir auf Bash on Ubuntu on Windows Dateiänderungen in /mnt/c/note rekursiv mit gulp überwachen, rsync-Befehl mit expect ausführen, wenn gulp aktiviert wird, und aktualisierte Dateien auf VPS hochladen. Ich möchte dieses Verhalten programmieren.

Hintergrund

Beim Remote-Desktop gibt es einen Fehler, bei dem das Kopieren von Text aus Atom auf PC1 und Einfügen auf PC2 zu seltsamer Formatierung führt. Als Lösung können wir Dateien zwischen zwei PCs synchronisieren.

Der einfache Weg ist die Verwendung der Windows-Standardfunktion, Dateifreigabe mit Samba. Wenn Sie eine Datei auf einer Seite ändern und speichern, wechselt der Inhalt auf der anderen Seite, ohne aktualisieren zu müssen, was praktisch ist. Dies funktioniert jedoch nur lokal. Es kann nur zwischen PCs im selben WLAN verwendet werden.

Es könnte möglich sein, dies remote zu tun, aber es remote zu machen bedeutet, die globale IP-Adresse Ihres Computers der Welt preiszugeben. Im Wesentlichen wird Ihr Computer leicht zum Ziel und wird ein Ziel für Hacking.

Das mag ich nicht, also dachte ich an eine Methode, bei der ich zusätzlich zu meinem eigenen Computer einen VPS-Server miete und dort Dateien bearbeite.

Wenn Sie dieselbe Datei auf zwei PCs bearbeiten möchten, arbeiten Sie über VPS.

Spezifische Schritte

sudo su -

cd /mnt/c/note

apt install -y nodejs npm nodejs-legacy expect rsync

npm install -g gulp
npm install -D gulp
npm init -y
npm install child_process

gulpfile.js

var gulp = require("gulp");
var ps = require('child_process').exec;

gulp.task('exec_file', function() {
  var command = "'/mnt/c/pg/expect/rsync_mnt_c_note'";
  ps(command , function (err, stdout, stderr) {
    console.log(stdout);
  });
});

gulp.task("watch", function() {
  var targets = [
    './**'
  ];
  gulp.watch(targets, ['exec_file']);
});

Eine Sache zu beachten ist hier, nicht . /mnt/c/pg/expect/rsync_mnt_c_note zu tun. /mnt/c/pg/expect/rsync_mnt_c_note selbst muss vom expect-Interpreter ausgeführt werden, also bedeutet . hogehoge die Ausführung mit Bash(sh/zsh), was dieselbe Bedeutung wie bash hogehoge oder source hogehoge hat, also seien Sie vorsichtig, es nicht aus Gewohnheit zu tun.

Erstellen Sie eine expect-Datei mit touch /mnt/pg/expect/rsync_mnt_c_note, mit folgendem Inhalt. (Ändern Sie YOUR_OWN für Ihre eigene Verwendung)

#!/usr/bin/expect

# C:\pg\expect\rsync_mnt_c_note

set PW "YOUR_OWN"
set Prompt "\[#$%>\]"
# set RemoteHost [lindex $argv 0]

set timeout 5

spawn rsync -av -e "ssh" -r "/mnt/c/note" root@YOUR_OWN:/root/lib/DESKTOP-PS5DVT5

expect {
    -glob "(yes/no)?" {
        send "yes\n"
        exp_continue
    }
    -glob "password:" {
        send -- "${PW}\n"
    }
}

expect {
    -glob "${Prompt}" {
        interact
        exit 0
    }
}

Führen Sie nun gulp watch im /mnt/c/note-Verzeichnis aus.

Dann, erstellen Sie eine Datei mit cat > /mnt/c/note/everything_note.md, und aktualisieren Sie die Datei mit cat >> /mnt/c/note/everything_note.md.

Überprüfen Sie nun, ob es ordnungsgemäß auf den VPS-Server hochgeladen wurde.

ssh root@YOUR_OWN
cat DESKTOP-PS5DVT5/note/everything_note.md

Wenn die Zeichen, die Sie mit cat eingegeben haben, ausgegeben werden, war der Upload erfolgreich.

Der Upload dauert etwa 3 Sekunden. Je nach Gewicht des gesamten Ordners ist es kein differenzieller Upload, der nur die aktualisierten Teile hochlädt, sondern ein vollständiger Upload, der alle Dateien hochlädt.

Hinweise

Auch als Hinweis: Bilder sind in Ordnung, aber Videodateien sollten nicht in den Zielordner gelegt werden... in diesem Beispiel /mnt/c/note, während gulp watch läuft.

Warum? Videos sind auch Dateien mit Doppelbyte-Zeichen, daher bedeutet eine Dateiaktualisierung, dass Zeichen aktualisiert werden. Mit anderen Worten, während ein Video hochgeladen wird, nehmen die Zeichen mit enormer Geschwindigkeit zu, und wenn Sie zu diesem Zeitpunkt gulp watch ausführen, werden Befehle zum Zugriff auf VPS jedes Mal ausgeführt, wenn Zeichen zunehmen. Daher belastet es den Server erheblich.

Seien Sie vorsichtig.

Diesen Artikel teilen

Shou Arisaka 6. Okt. 2025

🔗 Links kopieren