So schließen Sie Dateien ein, die in einem rsync ausgeschlossen sind

16

Ich versuche, einen Rsync einzurichten, der alle .*Dateien mit Ausnahme von ausschließt, .htaccessaber leider funktioniert dies nicht:

rsync -avP --exclude=".*" --include="./.htaccess" ./. user@server:/dir

Kann man allgemeine Ausschlussregeln irgendwie ausschließen?

Reich
quelle

Antworten:

24

Es gilt die erste Übereinstimmungsregel, also schließen Sie ein, .htaccessbevor Sie ausschließen .*.

rsync -avP --include=".htaccess" --exclude=".*" . user@server:/dir

Dies kopiert .htaccessauf jeder Ebene. Ich weiß nicht, womit Sie beabsichtigt haben ./.htaccess. Wenn Sie eine Datei nur im Stammverzeichnis der Kopie finden möchten, starten Sie das Muster mit einem /. Wenn Sie nur den Stamm verwenden möchten .htaccess, können Sie ihn nicht einfach verwenden --include='/.htaccess' --exclude='.*', da die nicht verwurzelte Regel hier Vorrang hat. Sie müssen etwas Komplizierteres tun:

rsync -avP --exclude='/*/**/.htaccess' --include='.htaccess' --exclude=".*" . user@server:/dir

Weiterführende Literatur: Grundprinzipien für Rsync-Filter .

Gilles 'SO - hör auf böse zu sein'
quelle
@ fred.bear: Das war ein echter Tippfehler und ein böser. Danke, dass du es gesehen hast!
Gilles 'SO- hör auf böse zu sein'
Danke, ich hatte versucht, das --includeerste zu setzen, aber das "./" vor dem "./.htaccess" war das, was es tötete.
Rich
1
@Rich beachte, dass wenn es versteckte Verzeichnisse gibt, die eine .htaccessDatei enthalten , musst du --include='.*/'(glaube ich) vor dem Finale --excludeauch hier
nachsehen