🧪Filter-Tester
Welche Dateien überträgt rsync, welche löscht es, welche schützt es? Regeln, Quelle und Ziel frei bearbeiten – die Simulation rechnet einen Probelauf wie rsync -ain --delete. Die Regel-Engine wurde mit 252 Kombinationen gegen den echten rsync 3.5.0 abgeglichen – die simulierten Ausgabezeilen stimmen überein.
🧫Probelauf
💡 Typische Website-Auslieferung: Abhängigkeiten, Geheimnisse, Logs und Build-Ordner bleiben zu Hause.
$ rsync -ain --delete -f'- node_modules/' -f'- .env' -f'- *.log' -f'- /build' projekt/ user@nas:/srv/web/
6 × neu1 × geändert5 × unverändert4 × ausgeschlossen3 × nicht durchsucht2 × gelöscht3 × geschützt
- 📄.envausgeschlossenRegel 2: - .env
- 📄README.mdunverändert
- 📄backup.tar.gzgelöscht
- 📄index.htmlunverändert
- 📁build/ausgeschlossenRegel 4: - /build
- 📄bundle.jsnicht durchsuchtliegt in einem ausgeschlossenen Verzeichnis
- 📁docs/neu
- 📄handbuch.pdfneu
- 📁logs/unverändert
- 📄gestern.loggeschütztRegel 3: - *.log
- 📄heute.logausgeschlossenRegel 3: - *.log
- 📁node_modules/ausgeschlossenRegel 1: - node_modules/beim Empfänger vorhanden und vor dem Löschen geschützt
- 📁lodash/geschütztliegt in einem geschützten Verzeichnis
- 📄index.jsgeschütztliegt in einem geschützten Verzeichnis
- 📁react/nicht durchsuchtbeim Empfänger vorhanden und vor dem Löschen geschützt
- 📄index.jsnicht durchsuchtbeim Empfänger vorhanden und vor dem Löschen geschützt
- 📁src/unverändert
- 📄alt.jsgelöscht
- 📄app.jsunverändert
- 📄app.test.jsgeändert
- 📁lib/neu
- 📄util.jsneu
- 📁cache/neu
- 📄tmp.binneu
Ausgabe des Probelaufs (-n -i)
*deleting backup.tar.gz
cd+++++++++ docs/
>f+++++++++ docs/handbuch.pdf
*deleting src/alt.js
>f.st...... src/app.test.js
cd+++++++++ src/lib/
>f+++++++++ src/lib/util.js
cd+++++++++ src/lib/cache/
>f+++++++++ src/lib/cache/tmp.bin
Format wie rsync 3.5.0 – die Simulation wurde in 252 Fällen mit dem echten rsync abgeglichen.
🔎 Einzelnen Pfad prüfen
Geprüft wird src/lib/cache/ (relativ zur Transfer-Wurzel).
1. - node_modules/nur letzter Namensteil, nur Verzeichnisse–2. - .envnur letzter Namensteil–3. - *.lognur letzter Namensteil–4. - /buildverankert: ganzer Pfad ab Transfer-Wurzel–- keine Regel des Senders passt → Standard: eingeschlossen
📐Die Regeln in fünf Sätzen
- Regeln werden von oben nach unten geprüft, die erste passende entscheidet. Passt keine, ist die Datei dabei.
- rsync prüft jede Datei und jedes Verzeichnis auf dem Weg nach unten. Ist ein Verzeichnis ausgeschlossen, schaut rsync gar nicht hinein – Includes für Dateien darin wirken dann nicht.
- Ohne
/im Muster zählt nur der letzte Namensteil; mit/oder**das Pfad-Ende; ein führender/verankert an der Transfer-Wurzel. - Die Transfer-Wurzel hängt vom Slash an der Quelle ab: bei
projektheißt die Regel/projekt/src, beiprojekt/nur/src. - Mit
--deleteschützen Excludes Dateien beim Empfänger vor dem Löschen.--delete-excludedhebt diesen Schutz auf.
| Muster | passt auf | Beispiel |
|---|---|---|
| *.log | jede Datei/jedes Verzeichnis, dessen Name auf .log endet – in jeder Tiefe | logs/heute.log ✓ · a.log.gz ✗ |
| /build | nur „build“ direkt in der Transfer-Wurzel | build ✓ · src/build ✗ |
| cache/ | nur Verzeichnisse namens cache (Dateien namens cache nicht) | src/cache/ ✓ |
| src/*.js | Pfad-Ende „src/<name>.js“ ab einer Verzeichnisgrenze | src/a.js ✓ · x/src/a.js ✓ · src/lib/a.js ✗ |
| src/** | alles unterhalb von src, beliebig tief (** darf / enthalten) | src/lib/a.js ✓ · src ✗ |
| src/*** | das Verzeichnis src selbst und alles darin | src ✓ · src/lib/a.js ✓ |
| /foo/**/bar | bar mindestens zwei Ebenen unter /foo | foo/x/bar ✓ · foo/bar ✗ |
| ?.txt · [0-9]* | ? = genau ein Zeichen außer /, [ … ] = Zeichenklasse | a.txt ✓ · 2026.csv ✓ |
🧾Schreibweisen
Kommandozeile
rsync -a \ --exclude='node_modules/' \ --include='*/' --include='*.php' \ --exclude='*' \ quelle/ ziel/
--filter / -f (mit Präfix)
rsync -a \ -f'- node_modules/' \ -f'P geheim.txt' \ -f'. regeln.txt' \ quelle/ ziel/
regeln.txt (--filter='. regeln.txt')
# Kommentar - .git/ - *.tmp + */ + *.md - * # ! würde alle Regeln davor löschen
💡 Präfixe
- exclude · + include · H/S hide/show (nur Sender) ·P/R protect/risk (nur Empfänger) · . Merge-Datei · : Verzeichnis-Merge (z. B. -F = : /.rsync-filter) · ! Liste leeren✅ Debuggen
rsync -avn --debug=FILTER … zeigt für jede Datei, welche Regel sie ein- oder ausgeschlossen hat. Achtung auf Leerzeichen am Regelende – rsync ≥ 3.2.4 warnt davor.⚠️ Unterschied zu rclone
rclone verarbeitet alle
--include vor allen --exclude und hängt bei --include ein unsichtbares- ** an. rsync hält sich strikt an die Reihenfolge auf der Kommandozeile und hat kein implizites Exclude.