Jeg kører Fedora 17 64-bit og rsync --exclude=/home/ben/<dir> fungerer ikke som forventet . 
 Jeg prøver at rsync mit hjemmekatalog til et tommelfinger-drev, men jeg vil bestemt udelukke mapper, der indeholder cache-filer og bygger filer. Dette er kommandoen, jeg bruger: 
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/ 
 Indhold fra ~/build og ~/.ccache kopieres af rsync. Hvad laver jeg forkert? 
Kommentarer
- Jeg tror, ekskluder mønstre bare ' fungerer ikke.
 
Svar
 Globale rsync filterregler, der begynder med en førende / er  forankret  til roden af overførsel. Citering fra afsnittet “INKLUDER / UDELUKKER MØNSTERREGLER” på mandsiden: 
hvis mønsteret starter med a / så er det forankret i et bestemt sted i hierarkiet af filer, ellers matches det mod slutningen af stienavnet. Dette svarer til en ledende ^ i regulære udtryk. Således “/ foo” ville matche et navn på “foo” på enten “roden af overfør “(for en global regel) eller i fletfilens mappe (for en regel pr. katalog).
 I din kommando (rsync ... -arv /home/ben home-ben/), filen /home/ben/foo overføres til home-ben/ben/foo. Roden til overførslen er home-ben, og den korrekte filtersti er /ben/foo. Således 
-  for at matche 
/home/ben/.ccachehar du brug for en filtersti på/ben/.ccache -  for at matche 
/home/ben/build/har du brug for en filtersti på/ben/build/ 
 En mere detaljeret forklaring kan være fundet i afsnittet “ANCHORING INCLUDE / EXCLUDE Mønstre” i  rsync(1) man-siden . 
 Bemærk, at det simpelthen ikke er det, du ønsker at bare udelade det førende /. Citerer igen fra det samme mandesektionsafsnit: 
En ukvalificeret “foo” svarer til navnet “foo” hvor som helst i træet, fordi algoritmen anvendes rekursivt ovenfra og ned; det opfører sig som om hver stykomponent får en drejning ved at være slutningen af filnavnet. Selv den ikke-forankrede “sub / foo” ville matche på ethvert tidspunkt i hierarkiet, hvor en “foo” blev fundet i en mappe med navnet “sub”. Se afsnittet om forankring inkluderer / udelukker mønstre for en fuldstændig diskussion af, hvordan du angiver et mønster, der matcher roden til overførslen.
 Således ville et filtermønster på build/ matche en build-mappe hvor som helst i /home/ben, endda /home/ben/many/sub/directories/build/. 
Kommentarer
Svar
ADVARSEL: Per @ rubo77 “s kommentar nedenfor , dette svar bør kun bruges, hvis du er villig til at ekskludere disse varer overalt i dit kildetræ, ikke kun ved roden. Se @ jw013s svar ovenfor for en mere grundig forklaring.
 Jeg tror, at dine exclude stier skal være relative til kildestien. Kan prøver du dette i stedet? 
rsync --exclude=build/ --exclude=.ccache -arv /home/ben home-ben/ 
Her “er en test til sammenligning:
/tmp$ tree src dest src ├── a └── b dest └── foo/ /tmp$ rsync -nav --exclude /tmp/src/b /tmp/src /tmp/dest sending incremental file list src/ src/a src/b $ rsync -nav --exclude b /tmp/src /tmp/dest sending incremental file list src/ src/a 
Kommentarer
- Dette svar er forkert. Med en relativ ekskluderingssti vil du ekskludere mønsteret overalt!
 -  Dette indlæg er korrekt. Matchningen er tekstbaseret, ikke filinode-baseret. Uanset hvilken sti output fra 
--verbosekommandoen viser, er det format, du skal bruge. - Dette fungerede for mig.
 - Hvad hvis kildesti er ' / ' så absolut er de relative stier, men det er stadig ikke ' t fungerer.
 - Dette er det eneste, der fungerede for mig.
 
Svar
Dit ekskluderingsmønster fungerer, hvis du synkroniserer hele / hjemmestien, dvs.uden et skråstreg:
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home home-all/ 
Men bedre rsynkroniser kun indholdet af mappen med et skråstreg:
rsync --exclude=/build --exclude=/.ccache -arv /home/ben/ home-ben/ 
Du kan også bruge en ignoreringsliste, se: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folders
Svar
Jeg havde dette problem i et script (jeg ved ikke, om det er din sag). Jeg var fordi jeg brugte denne kommando i et script, og jeg brugte sh i stedet for bash. tjek shebang i begyndelsen af dit script.
Kommentarer
- Hvordan ville shell-valg af shell-tolk forårsage netop dette problem?
 
Svar
For at udelukke en bestemt mappe med rsync skal du overveje den relative sti i kommandoen. i dit tilfælde:
rsync --exclude=/ben/build/ --exclude=/ben/.ccache -arv /home/ben home-ben/ 
hvor “ben” er den mappe, du synkroniserer
rsync -a source destinationselve kildekataloget til destinationen. Dette bestemmer, hvad roden til overførslen er for at informere ekskluderingsudtrykket. Den korrekte anvendelse af / i ekskluderingsudtrykket forklares derefter ovenfor. Bemærk især, atrsync --exclude='/dir1' source destinationvandt ' t udelukker noget.