🧪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. 1. - node_modules/nur letzter Namensteil, nur Verzeichnisse–
  2. 2. - .envnur letzter Namensteil–
  3. 3. - *.lognur letzter Namensteil–
  4. 4. - /buildverankert: ganzer Pfad ab Transfer-Wurzel–
  5. keine Regel des Senders passt → Standard: eingeschlossen

📐Die Regeln in fünf Sätzen

  1. Regeln werden von oben nach unten geprüft, die erste passende entscheidet. Passt keine, ist die Datei dabei.
  2. 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.
  3. Ohne / im Muster zählt nur der letzte Namensteil; mit / oder ** das Pfad-Ende; ein führender / verankert an der Transfer-Wurzel.
  4. Die Transfer-Wurzel hängt vom Slash an der Quelle ab: bei projekt heißt die Regel /projekt/src, bei projekt/ nur /src.
  5. Mit --delete schützen Excludes Dateien beim Empfänger vor dem Löschen. --delete-excluded hebt diesen Schutz auf.
Musterpasst aufBeispiel
*.logjede Datei/jedes Verzeichnis, dessen Name auf .log endet – in jeder Tiefelogs/heute.log ✓ · a.log.gz ✗
/buildnur „build“ direkt in der Transfer-Wurzelbuild ✓ · src/build ✗
cache/nur Verzeichnisse namens cache (Dateien namens cache nicht)src/cache/ ✓
src/*.jsPfad-Ende „src/<name>.js“ ab einer Verzeichnisgrenzesrc/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 darinsrc ✓ · src/lib/a.js ✓
/foo/**/barbar mindestens zwei Ebenen unter /foofoo/x/bar ✓ · foo/bar ✗
?.txt · [0-9]*? = genau ein Zeichen außer /, [ … ] = Zeichenklassea.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.