GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rsync, nur bestimmte Dateitypen einschließen, einige Verzeichnisse ausschließen?

Ich möchte nur bestimmte Dateitypen synchronisieren (z. B. .py ) und ich möchte Dateien in einigen Verzeichnissen ausschließen (z. B. venv ).

Folgendes habe ich versucht:

rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

Aber es funktioniert nicht.

Was übersehe ich?

Ich bin auch der Antwort auf diese Frage gefolgt, aber sie hat nicht geholfen.

Akzeptierte Antwort:

venv/ muss vorher ausgeschlossen werden */ ist enthalten:

rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

Die Subtilität ist, dass rsync verarbeitet die Regeln der Reihe nach und die erste übereinstimmende Regel gewinnt. Wenn also --include='*/' steht vor --exclude='venv/' , dann das Verzeichnis venv/ wird durch --include='*/' eingeschlossen und die Ausschlussregel wird nie konsultiert.

Können wir das vereinfachen?

Warum brauchen wir --include='*/' und --exclude='*' ? Warum ist --exclude=venv/ --include='*.py' nicht ausreichend?

Standardmäßig werden Dateien/Verzeichnisse eingeschlossen. Überlegen Sie also:

rsync -avz --exclude='venv/' --include='*.py' source target

Dies würde alles außer Dateien oder Verzeichnissen unter venv/ einschließen . Sie wollen aber nur .py Dateien. Das bedeutet, dass wir andere Dateien explizit mit --exclude='*' ausschließen müssen .

--exclude='*' schließt beides aus Dateien und Verzeichnisse. Wenn wir also --exclude='*' angeben , dann würden alle Verzeichnisse ausgeschlossen und nur die .py Dateien würde das Root-Verzeichnis gefunden werden. .py Dateien in Unterverzeichnissen würden nie gefunden, weil rsync sucht nicht in ausgeschlossenen Verzeichnissen. Also, wenn wir --exclude='*' haben , müssen wir ihm --include='*/' voranstellen um sicherzustellen, dass der Inhalt aller Verzeichnisse durchsucht wird.


Linux
  1. Wie man Dateien tariert (komprimiert), bestimmte Dateien oder Verzeichnisse ausschließt

  2. Nur übertragene Dateien mit Rsync protokollieren?

  3. Wie man Verzeichnisse rekursiv mit rsync kopiert und dabei bestimmte Dateien ausschließt

  4. Entfernen Sie nur Dateien in Verzeichnissen unter Linux, NICHT in Verzeichnissen

  5. cp nur Dateien, Verzeichnisse überspringen

So verwenden Sie rsync zum Ausschließen von Dateien und Verzeichnissen bei der Datenübertragung

So schließen Sie Dateien und Verzeichnisse mit Rsync aus

So sichern Sie Dateien und Verzeichnisse mit Rsync unter Linux

Linux-Dateien und -Verzeichnisse mit rsync synchron halten

Diff -r nur für bestimmte Dateitypen?

Finden Sie Dateien und drucken Sie nur ihre übergeordneten Verzeichnisse