ප්‍රභව ෆෝල්ඩරයෙන් මකාදැමූ ගොනු rsync මකා දැමිය හැක්කේ කෙසේද?


230

ක්‍රීඩා සේවාදායකයන් සත්කාරකත්වය සැපයීම සඳහා මම මෑතකදී උබුන්ටු සේවාදායකය සමඟ යන්ත්‍රයක් සකස් කළෙමි. යන්ත්‍රයේ විශේෂිත ෆෝල්ඩරයක ක්‍රීඩා ලෝක ලිපිගොනු නිරන්තරයෙන් උපස්ථ නිර්මාණය කරන සෑම ක්‍රීඩා සේවාදායකයක් සඳහාම මම උපස්ථ ප්ලගිනයක් ස්ථාපනය කළෙමි. විකල්පය cronසමඟ rsync භාවිතා කරමින් සෑම රාත්‍රියකම එම උපස්ථ මගේ ඩ්‍රොප්බොක්ස් ෆෝල්ඩරයට ස්වයංක්‍රීයව පිටපත් කිරීමේ කාර්යයක් ද මම ස්ථාපිත කළෙමි -a.

මාස කිහිපයකට පසු මගේ ඩ්‍රොප්බොක්ස් ගිණුම එහි ගබඩා සීමාවට ළඟා වූ අතර මට උපස්ථ විශාල ප්‍රමාණයක් තබා ගත නොහැකි බව මට වැටහුණි, එබැවින් මම උපස්ථ විශාල ප්‍රමාණයක් රඳවා නොගන්නා ලෙස ක්‍රීඩා සේවාදායක උපස්ථ ප්ලගිනය වින්‍යාස කර, පසුව එය සිදුවනු ඇත්දැයි බැලීමට දින කිහිපයක් බලා සිටියෙමි. සතිපතා කිරීමට නියමිත බැවින් පැරණි උපස්ථ මකා දමන්න. උපස්ථ ප්ලගිනය අවසානයේ එහි කාර්යය ඉටු කළ අතර පැරණි උපස්ථ මකා දැමීය, එබැවින් rsyncක්‍රෝන් කාර්යය පසුව මගේ ඩ්‍රොප්බොක්ස් ෆෝල්ඩරයෙන් පැරණි බැකප් ප්‍රභව ෆෝල්ඩරයට ගැලපෙන පරිදි මකා දැමෙනු ඇතැයි මම අපේක්ෂා කළෙමි , නමුත් එය එසේ කර නැත. එබැවින් මට ප්‍රශ්න කිහිපයක් තිබේ:

  • සුපුරුදු පරිදි, ඇයි rsyncපමණක් එකතු මූලාශ්රය ෆෝල්ඩරය හා එකතු කර ඇති ෆෝල්ඩරයට ගොනු වෙනස් මූලාශ්රය ෆෝල්ඩරය නමුත් වෙනස් කර ඇති බව ගොනු මකා දැමිය නොහැකි මූලාශ්ර ෆෝල්ඩරය ඉවත් වුණා ගොනු?

  • එය එසේ නම්, මෙය කිරීමට හොඳම ක්‍රමය rsyncකුමක්ද? ගමනාන්ත ෆෝල්ඩරය ප්‍රභව ෆෝල්ඩරය මනාව පිළිබිඹු කිරීමට මට අවශ්‍යය, එයින් අදහස් කරන්නේ ප්‍රභව ෆෝල්ඩරයෙන් මකාදැමූ ඕනෑම ගොනු මකා දැමීමයි.

අත්පොත පිටුවේ ලැයිස්තුගත කර ඇති සමහර විකල්පයන් rsyncඋපක්‍රමය කළ හැකි බව මට පෙනේ , නමුත් මට හුරු නැති නිසා.

Answers:


277

ඉලක්කයේ ගොනු මකා දැමීමට, --deleteඔබේ විධානයට විකල්පය එක් කරන්න. උදාහරණයක් වශයෙන්:

rsync -avh source/ dest/ --delete

1
සමහර විට -aqrඒ වෙනුවට භාවිතා කිරීම ද අදහසක් වනු ඇත :)
සුභමොයි එස්.

21
ප්‍රභවය නාමාවලියක් බවට වග බලා ගන්න. භාවිතා කිරීම සාර්ථක source/* dest/නොවේ.
ටොම් සලීබා

7
මම ඒ අවස්ථාවේ සොයා --deleteහෝ --delete-afterඑය නිසා සමහර වැරදි මකා දැමිය නොහැකි වනු ඇත: "IO දෝෂයක් - පනින ගොනු මකා දැමීමට". මෙම එකතු කිරීමේ --ignore-errorsවිකල්පය නිරාකරණය කර දෝෂ වෙන වෙනම නිරාකරණය කිරීම සඳහා
එම්එච්ටී

15
පරිපූර්ණව ක්රියා කරයි! එය ක්‍රියාත්මක වුවද -n, --dry-run, ධාවනය කිරීමට පෙර rsync, විශේෂයෙන් මෙවැනි ( --delete) වැනි විකල්ප සම්බන්ධයෙන් ගත් විට, සෑම විටම භාවිතා කිරීමේ විකල්පය නිර්දේශ කරමි . එය ඇතිවිය හැකි හිසරදයක් වළක්වනු ඇත :).
ivanleoncz

2
B TheBicentennialMan -a ඇඟවුම් -r කරයි.
x-yuri

51

ඔබ එම විධානයෙහි සමහර විකල්ප භාවිතා කරන අතරතුර rsync විධානය කිසිදු ගොනුවක් මකා නොදමනුdelete ඇත. එබැවින් කිසියම් ගොනුවක් හෝ ෆෝල්ඩරයක් ප්‍රභවයට එකතු කර ඇත්නම්, එය මකාදැමීමකින් තොරව ඉලක්කයට සමමුහුර්ත වේ.

rsyncමූලාශ්‍ර ලිපිගොනු වලින් උපස්ථ සෑදීම සඳහා සහ find ... rmලිපිගොනු මකාදැමීම සඳහා භාවිතා කිරීමට මම ඔබට යෝජනා කරමි .

rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;

ඉහත කේත වාරණය, ප්‍රභවයෙන් උපස්ථයක් සාදා අවසන් වරට වෙනස් කළ කාලය මාස 2 කට වඩා වැඩි වන සෑම ලිපිගොනුවක්ම මකන්න.

යාවත්කාලීන කරන්න

deleteවිකල්පයන් TARGET සඳහා පමණක් බව මට පෙනී ගිය පරිදි, සමහර ලිපිගොනු ප්‍රභවයෙන් ඉවත් කළ හොත්, rsync --deleteඒවා TARGET වෙතින් ඉවත් කරන්න. හා deleteමනාපය afterසහ beforeman පිටුව සඳහන් පරිදි:

--delete-before         receiver deletes before transfer, not during

ඒකේ තේරුම:

  1. rsync SOURCE වෙතින් ඉවත් කරන ලද TARGET වෙතින් ගොනුව මකන්න.
  2. rsync ගොනු සමමුහුර්ත කිරීම ආරම්භ කරන්න.

--delete-after receiver deletes after transfer, not during

ඒකේ තේරුම:

  1. rsync ගොනු සමමුහුර්ත කිරීම ආරම්භ කරන්න.
  2. rsync සමමුහුර්ත කිරීමෙන් පසුව SOURCE වෙතින් ඉවත් කරන ලද TARGET වෙතින් ගොනුව මකන්න.

සටහන : --delete-{before/after}TARGET හි ක්‍රියාත්මක කිරීම.


1
පිළිතුරට ස්තුතියි!! ඔබ rsync සඳහා "මකන්න" විකල්පයක් ගැන සඳහන් කරනවාද? මට rsync සඳහා "මකන්න" විකල්පය භාවිතා කළ නොහැක්කේ ඇයි?
user254251

25 user254251, ඔබ මකන්න භාවිතා කරන්නේ නම්, rsync විධානය වහාම ගොනු මකා දමයි. නමුත් මෙම අවස්ථාවේ දී ඕනෑම දෝෂයක් සඳහා වැඩි කාලයක් තිබේ.
shgnInc

මම නිවැරදිව තේරුම් ගත්තා නම්, ඔබ කියන්නේ දෝෂ මඟහරවා ගැනීම සඳහා මකාදැමීමේ කාර්යය rsync කාර්යයෙන් වෙන් කළ යුතු බවයි. මට ප්‍රශ්නයක් ඇත. Rsync සඳහා වන අත්පොත පිටුව මකාදැමීමේ කාර්යය පිටපත් කිරීමේ කාර්යයට පෙර හෝ පසුව ක්‍රියාත්මක කිරීමෙන් වෙන් කිරීමේ අරමුණ ඉටු කිරීම සඳහා පෙනෙන විකල්ප කිහිපයක් ලැයිස්තුගත කරයි. උදාහරණයක් ලෙස, --delete-before සහ --delete-after යනුවෙන් විකල්ප දෙකක් මට පෙනේ. මෙම විකල්පයන් සමඟ rsync ඔබ විස්තර කළ ක්‍රමයට සමාන බලපෑමක් ඇති කරයිද? අත්පොත පිටුවේ එක් එක් විකල්පය පිළිබඳ සම්පූර්ණ විස්තරය මම කියවූ නමුත් විස්තරවල සමහර තොරතුරු මට නොතේරේ.
user254251

@ user254251, පිළිතුර යාවත්කාලීන කරන ලදි. Rsync හි කාල සීමාව අනුව TARGET වෙතින් ලිපිගොනු මකා දැමීමට ක්‍රමයක් තිබේදැයි මම නොදනිමි .
shgnInc

ස්තූතියි! ඉතින් --delete-before විකල්පය භාවිතා කරන්නේ නම් මම දෝෂ වලින් ආරක්ෂා යැයි ඔබ සිතනවාද? මම කල් ඉකුත් වීමක් නියම නොකරමි, එබැවින් rsync මකාදැමීමේ අදියර මාරු කිරීමේ අදියර ප්‍රමාද කරන්නේ නම් මට කරදර විය යුතු නැත. rsync දිනකට එක් වරක් ධාවනය වන අතර ඊළඟ සමමුහුර්තයට පෙර උපස්ථ ගොනු සමමුහුර්ත කිරීමට එය ඕනෑ තරම් කාලය ඇත, එබැවින් මට සමමුහුර්ත කිරීම කාල සීමා කිරීමට අවශ්‍ය නොවිය යුතුය.
user254251

6

මෙම විධානය මඟින් වර්ධක දත්ත පිටපත් කර දුරස්ථ සේවාදායකය සමඟ සමපාත වේ.

  1. එය පිටපත් කරනුයේ වර්ධක දත්ත පමණි.
  2. කිසියම් දත්ත ප්‍රභවයකින් මකා දැමුවහොත් එය මැකෙනු ඇත.
  3. ගමනාන්තයේදී කිසියම් දත්තයක් මකා දැමුවහොත් එය නැවත ප්‍රභවයෙන් පිටපත් වේ.
  4. මූලික වශයෙන් මෙම විධානය මඟින් පරිසරය දෙකම සමමුහුර්තව තබා ගනී.

rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)

උදාහරණයක්:

rsync -avWe ssh --delete-before /data root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup

2
මම හිතන්නේ -W කරන්නේ වර්ධක දත්ත පමණක් නොව සෑම විටම සම්පූර්ණ ලිපිගොනු පිටපත් කිරීමයි.
ටියුලින්ස් කෝර්ඩෝවා

මෙම විධානය ක්‍රියාත්මක කිරීමෙන් මට මෙම දෝෂය ඇතිවිය: rsync: Failed to exec --delete-before: No such file or directory (2)
ජෙෆ් ටියාන්

2

ක rsync scync තුළ ඕනෑම වැරදි තිබේ නම්, rsync නිසි ගොනු ඉවත් වන්නේ නැත එය, තිබිය යුතු ඔබ භාවිතා වුවද --delete, --delete-afterහෝ --delete-before.

Rsync දෝෂ විසඳීම වැදගත් වන්නේ මේ නිසා ය.

මගේ බොහෝ දෝෂ වලට හේතු වූයේ --permsලිනක්ස් නොවන ගොනු පද්ධතියක් සමඟ සමමුහුර්ත කිරීමේදී විකල්පය භාවිතා කිරීමයි . මා ප්‍රතිස්ථාපනය --permsකළ විට --no-perms, එම දෝෂ ඉවත් වී මකාදැමීම ක්‍රියාත්මක විය.

--permsඔබ ලිනක්ස් ගොනු පද්ධතියක සිට වෙනත් ලිනක්ස් ගොනු පද්ධතියකට සමමුහුර්ත කරන විට කමක් නැත, නමුත් ඔබ ලිනක්ස් සිට ලිනක්ස් නොවන ගොනු පද්ධතියකට (එන්ටීඑෆ්එස්, ෆැට් වැනි) සමමුහුර්ත කරන්නේ නම්, --permsදෝෂ ඇති වන්නේ rsync හට ලිනක්ස් අවසරයන් a මත සැකසිය නොහැකි බැවිනි . ලිනක්ස් නොවන ගොනු පද්ධති . නැවතත්, දෝෂ = මකාදැමීමක් නැත.

- ලිනක්ස් නොවන කොටසකට සමමුහුර්ත කරන විට , --no-permsකඩාකප්පල් කිරීමේ හෝ වළක්වා ගැනීමේ දෝෂ මඟහරවා ගැනීමට මම භාවිතා කරමි .--delete--delete-after--delete-before

ඉන් පසුවද ඔබට දෝෂ ඇති වුවහොත් සහ එම දෝෂ මඟහරවා ගන්නේ කෙසේදැයි සිතාගත නොහැකි නම්, ඔබට සමමුහුර්ත නොවන ගොනු මකා දැමීමට පමණක්ම කැප වූ විධානයක් ක්‍රියාත්මක කළ හැකිය:

sudo rsync -r --delete --existing --ignore-existing --ignore-errors --progress /path/to/source/ /path/to/destination

ඉහත විධානය මඟින් සමමුහුර්ත නොවන දේවල් මකා දමනු ඇත, නමුත් කිසිදු ලිපිගොනු සමමුහුර්ත නොකරයි. එබැවින්, ඔබ මෙයින් පසු නැවත සමමුහුර්ත කළ යුතුය. එම විධානය පදනම් වී ඇත්තේ මෙම පිළිතුරෙන් වන අතර , මම --ignore-errorsතර්කය ද එකතු කළෙමි , එබැවින් දෝෂ තිබුණත් එය මකා දැමෙනු ඇත.


1
ඉඟියට ස්තූතියි! මීට වසර 5 කට පෙර මෙම ප්‍රශ්නයේ මුල් කතුවරයා මමයි. ඔබ මෙය පළ කිරීම ගැන මට සතුටුයි, cuz නුදුරු අනාගතයේ දී මම එන්ටීඑෆ්එස් ඩ්‍රයිව් එකකට සමමුහුර්තකරණය කිරීමට සැලසුම් කර ඇති අතර, බොහෝ විට මම "-a" විකල්පය භාවිතා කිරීමට සැලසුම් කර තිබූ නිසා මම අවසර දෝෂයට ගොදුරු වන්නට ඇත. rsync, එය අවසර සමමුහුර්ත කරයි (වෙනත් දේ අතර). එබැවින් මම මගේ සටහන් වලට "--no-perms" එකතු කළෙමි. මම දැන් rsync -a --no-perms --delete-before භාවිතා කිරීමට අදහස් කරමි. මට ප්‍රශ්නයක් තිබේ: සමමුහුර්ත කිරීමට පෙර මකාදැමීම ක්‍රියාත්මක කිරීමෙන් ගොනු මකාදැමීමේ ගැටළු - delete-before වළක්වා ගත නොහැකිද? සිතුවිල්ල එහි අරමුණ විය.
user254251

@ user254251 - මට විශ්වාස නැත. මම හිතන්නේ එය සැබවින්ම "කලින් මකා දමන්නේ" කෙසේද යන්න මත රඳා පවතී. මකාදැමීම ආරම්භ වීමට පෙර එක් දෝෂයක් ඇති වුවහොත්, ඔබේ ඉස්කුරුප්පු ඇණ. මම ඔබට දෙන අවවාදය නම්, ඔබේ බූරුවාගේ තියුණු වේදනාවන්ට ඔබ කැමති නැතිනම් ඔබට හැකි ඕනෑම වේලාවක NTFS වළක්වා ගැනීමයි :). NTFS සිට NTFS දක්වා හොඳින් ක්‍රියා කරයි. NTFS සිට Linix දක්වා හොඳින් ක්‍රියා කරයි. "ලිනක්ස් ගොනු පද්ධතිය" සිට "ලිනක්ස් නොවන ගොනු පද්ධතිය" දක්වා වළකින්න; වැඩ නිවැරදිව මකා දැමීම සහතික කිරීම වේදනාවට වඩා වැඩිය. ඔබට මෙය කළ හැකිය, නමුත් ගමනාන්ත ධාවකය EXT4 ලෙස සංයුති කිරීමට එදිරිව කරදරයක් නොවන බව මම තීරණය කළෙමි.
ලොනී හොඳම

1

'-Delete' ධජය ඔබගේ /sourceසහ පසු දර්ශනය විය යුතුය /destination.
ඉතින් මේ වගේ

rsync -rvpthE --progress /Volumes/EOS_DIGITAL/DCIM/ /Users/mitchellg/Desktop/files -delete

විකල්ප:

  • -r පුනරාවර්තන
  • -v verbose (තිරයට මුද්‍රණය කරන්න)
  • -p අවසර
  • -t වේලාව (චෙක්සම් 'සී' වෙනුවට කාලය භාවිතා කරන්න)
  • -h මිනිස් කියවිය හැකි
  • -E විස්තාරිත තොරතුරු (.Mac හි වර්ණ ටැග්)
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.