Rsync සමඟ බහු නාමාවලි බැහැර කරන්නේ කෙසේද?


195

මම rsync භාවිතයෙන් මගේ නිවාස නාමාවලිය උපස්ථ කිරීමට උත්සාහ කරමි, තවද මට අවශ්‍ය වන්නේ ඩිරෙක්ටරි සමහරක් බැහැර කිරීමට ය. මම විශේෂයෙන් ඉවත් කිරීමට අවශ්ය බව /home/ben/.ccacheහා /home/ben/build. අවාසනාවට rsync සඳහා වන ලියකියවිලි තොරතුරු අධික ලෙස පැටවූ අතර මගේ ප්‍රශ්නයට පිළිතුරු දුන්නේ නැත. මම උත්සාහ කළේ මෙයයි:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

මෙය කිරීමට නිවැරදි ක්‍රමය කුමක්ද?


5
ධජය දැනටමත් aඅඟවන බව පැවසීමට අවශ්‍යය r:)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Populus

Answers:


253

හරි මට ගොළුයි වගේ. මම මෙම ප්‍රශ්නය පළ කිරීමට පෙර මගේ මිතුරා එය කරන්නේ කෙසේදැයි මට පෙන්වූ අතර එය ඇත්තෙන්ම සරල ය. බහුවිධ නාමාවලි බැහැර කිරීම සඳහා ඔබ බහු --exclude=pathස්විච භාවිතා කරයි. එබැවින් ඉහත සඳහන් මගේ විධානය නිසි ලෙස ලියා ඇත:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

8
නිරපේක්ෂ මාර්ගයක් මා වෙනුවෙන් ක්‍රියා නොකළේය (නිශ්චිත නාමාවලිය නිහ ly ව බැහැර කර නැත), නමුත් ප්‍රභව නාමාවලියට සාපේක්ෂව මාර්ගයක් නිවැරදිව ක්‍රියාත්මක විය. සමහර විට මට යමක් මග හැරී ඇත, නමුත් නිරපේක්ෂ මාර්ග සැමවිටම ක්‍රියාත්මක වන බවට re ෆ්‍රීසොෆ්ට්වෙයාර් සර්වර්ස්ගේ ප්‍රකාශය ගැන මම ප්‍රවේශම් වන්නෙමි.
සෝරන් ජෝර්න්ස්ටැඩ්

8
FYI: මෙම විකල්පය -aඇතුලත් -rඑසේ -arඅතිරික්ත වේ.
ඩේවිඩ්

6
FreeSoftwareServers විශ්වාස කරන දෙයට පටහැනිව, බැහැර කිරීමේ මාර්ගය ප්‍රභව මාර්ගයට සාපේක්ෂ වේ, NOT /. එබැවින් එම ප්‍රකාශය තරයේම අසත්‍යයක් වන අතර ඔබ එය අනුගමනය කරන්නේ නම් එය අසාර්ථක වීමට හේතු වේ. හොඳම උපායමාර්ගය නම් මේ ආකාරයේ මානසික දෝෂයන් වළක්වා ගැනීම සඳහා ඔබෙන් බැහැරව සිටින අයගෙන් ඉවත් වීමයි. මූලාශ්‍රය කියන්නේ නම්, / home / me සහ ඔබ = '/ mydir /' බැහැර කරන්නේ නම් මෙය / home / me හි ඇති mydir නාමාවලිය බැහැර කරයි, එනම්, එය / home / me / mydir NOT / mydir / at / බැහැර කරයි. එම අදහස තාක්‍ෂණිකව වැරදියි සහ නොමඟ යවන බැවින් මට එම අදහස අවතක්සේරු කිරීමට හෝ සංස්කරණය කිරීමට නොහැකි වීම අවාසනාවකි.
Lizardx

4
පසුකාලීන සංචාරකයින් සඳහා FYI, @FreeSoftwareServer විසින් ප්‍රශ්න කර ඇති අදහස ඉවත් කර ඇති බව පෙනේ. tl; dr: සාපේක්ෂ මාර්ග භාවිතා කරන්න
Freedom_Ben

2
ඔබ ගොළු නම් මමත් තවත් 179 ක් පමණයි!
ශ්‍රීධර් සර්නොබත්

120

බැහැර කිරීම සඳහා බහලුම් සහ / හෝ ගොනු ඇති විට, පෙළ ගොනුවක් සාදා --exclude-fromස්විචය භාවිතා කරන්න . නමින් ගොනුවක් සාදන්න, එහි exclude_me.txtඔබේ බැහැර කිරීම් ලැයිස්තුගත කරන්න. උදාහරණය ( /home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

එවිට ඔබේ rsync මේ වගේ දෙයක් වනු ඇත:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

මෙය පෙරහන් නීති පිළිබඳ සමහර තොරතුරු වේ:

  • /dir/ මූල ෆෝල්ඩරය බැහැර කරන්න /dir
  • /dir/*එයින් අදහස් කරන්නේ මූල ෆෝල්ඩරය ලබා ගන්න /dirනමුත් අන්තර්ගතය නොවේ
  • dir/ නම අඩංගු ඕනෑම ෆෝල්ඩරයක් බැහැර කරන්න dir/

  • නිදසුන් බැහැර කර ඇත: /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cfඑයින් අදහස් වන්නේ cfඕනෑම ෆෝල්ඩරයක් තුළ ආරම්භ වන ලිපිගොනු මඟහරින්න/var/spool/lpd

ද දකින පෙරහන නීති මිනිසා පිටුවේ කොටස.


6
එය සටහන් කිරීම වැදගත් මූල ෆෝල්ඩරය අදහස් කරන්නේ එම මාරුව මූල root බහලුම නැත.
ජේම්ස්ඩ්ලින්

මෙය දීප්තිමත් පිළිතුරකි!
ඇලෙක්සැන්ඩර් ෂුකොව්

1
අවසාන වශයෙන් කෙනෙකු අතර වෙනස පැහැදිලි /dir/හා dir/rsync ගණන්වල විකල්පය +1 ඉවත්
4levels

93

කැරලි වරහන් තුළ ඔබට විවිධ මාර්ග බැහැර කළ හැකිය:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

45
මෙය ඉතා හොඳින් ක්‍රියාත්මක වේ, ෂා යටතේ පමණක් නොව, බාෂ් යටතේ පමණක්, මම "දුෂ්කර මාර්ගය" සොයා ගතිමි
xor

9
කොමාවෙන් පසු ඉඩක් නොමැත. දුෂ්කර මාර්ගයද ඉගෙන ගත්තා st
styl3r

--Exclude = 'වැනි භාවිතා නොකරන්න. Gvfs'
මාටින් ටී.

FWIW, මම හිතන්නේ කැරලි වරහන් ksh සමඟ වැඩ කරනවා. වෙනත් ෂෙල් වෙඩි සඳහා, ඔබට බොහෝ විට මෙවැනි දෙයක් භාවිතා කළ හැකිය : IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/. නැතහොත්, ඔබට --excludeඅතින් ටයිප් කළ යුතු බහු තර්ක භාවිතා කළ හැකිය .
TSJNachos117

1
මෙය ක්‍රියාත්මක වීමට හේතුව ඕනෑම කෙනෙකුට විස්තර බැලීමට අවශ්‍ය නම් “වරහන් පුළුල් කිරීම” ය.
shredalert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.