Ich möchte nur bestimmte Dateitypen (z. B. .py
) rsyncieren und Dateien in einigen Verzeichnissen (z venv
. B. ) ausschließen.
Folgendes habe ich versucht:
rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
Aber es funktioniert nicht.
Was vermisse ich?
Ich folgte auch der Antwort auf diese Frage, aber es half nicht.
--include='*/'
?Antworten:
venv/
muss ausgeschlossen werden , bevor*/
ist im Preis inbegriffen:Die Subtilität ist , dass die
rsync
Prozesse Regeln um und die erste zutreffende Regel gewinnt. Wenn dies--include='*/'
vorher--exclude='venv/'
der Fallvenv/
ist , wird das Verzeichnis von eingeschlossen--include='*/'
und die Ausschlussregel wird niemals konsultiert.Könnten wir das vereinfachen?
Standardmäßig werden Dateien / Verzeichnisse eingeschlossen. Bedenken Sie also:
Dies würde alles außer Dateien oder Verzeichnissen unter einschließen
venv/
. Sie möchten jedoch nur.py
Dateien. Das bedeutet, dass wir andere Dateien mit explizit ausschließen müssen--exclude='*'
.--exclude='*'
schließt sowohl Dateien als auch Verzeichnisse aus. Wenn wir also angeben--exclude='*'
, werden alle Verzeichnisse ausgeschlossen und nur die.py
Dateien im Stammverzeichnis gefunden..py
Dateien in Unterverzeichnissen werden niemals gefunden, darsync
sie keine ausgeschlossenen Verzeichnisse untersuchen. Wenn dies der Fall ist--exclude='*'
, müssen wir dem vorausgehen,--include='*/'
um sicherzustellen, dass der Inhalt aller Verzeichnisse untersucht wird.quelle
--include='*/'
und--exclude='*'
? Warum--exclude=venv/ --include='*.py'
funktioniert nur nicht?