2016-04-09 10 views
1

So habe ich diesen Code:Fügen Sie Ordner mit dem gleichen Namen, die andere in auszuschließen in rsync

rsync \ 
    --archive \ 
    --verbose \ 
    --compress \ 
    --delete \ 
    --no-motd \ 
    --exclude=.git* \ 
    --exclude=.idea \ 
    --exclude=.tags \ 
    --exclude=vendor \ 
    --exclude=tags \ 
    --exclude=node_modules \ 
    --rsync-path="sudo rsync" \ 
    "${src}"/ \ 
    "${profile}":"${dst}" 

Und es funktioniert schön! Aber ich habe ein Problem ... mit dieser Baumstruktur:

. 
├── app 
│   ├── vendor/ 
├── vendor/ 

Es funktioniert nicht. Ich möchte nur ./vendor ausschließen aber ./app/vendor einschließen. Ich habe versucht mit --include aber das Ergebnis ist das gleiche: app/vendor ist immer ausgeschlossen.

Antwort

2

ist Es gibt zwei Möglichkeiten, dies zu tun:

  1. Mit --include:

    rsync \ 
        .... \ 
        --include=app/vendor \ 
        --exclude=vendor \ 
        .... 
    

    D.h. setzen die --includevor die --exclude

  2. Mit einem spezielleren --exclude:

    rsync \ 
        .... \ 
        --exclude=/vendor \ 
        .... 
    

    D.h. Schließen Sie nur die vendor im Quellverzeichnis root aus (nicht zu verwechseln mit dem Root des Dateisystems).

Die Grundregel für include/Regeln auszuschließen ist, dass rsync die erste Regel verwenden, die beliebige Datei übereinstimmt. Sie setzen Ihre spezifischen Regeln ganz oben und die allgemeinen Regeln unten. Wenn Sie sie zurückbekommen, werden Sie feststellen, dass Ihre spezifische Überschreibung nicht funktioniert.