X දින + ට වඩා පැරණි ගොනු මකන්න


160

ෆෝල්ඩරයක දින 5 කට වඩා පැරණි ගොනු මකාදැමීමේ විධානය මට හමු විය

find /path/to/files* -mtime +5 -exec rm {} \;

නමුත් එම ෆෝල්ඩරයේ උප බහලුම් සඳහා මම මෙය කරන්නේ කෙසේද?


ඔබ අදහස් කරන්නේ උප නාමාවලි තුළ ඇති ගොනුද? නැත්නම් උප නාමාවලිද?
රාහුල්

3
find /path/to -type d -empty -delete
කොස්ටාස්

2
දින 5+ පැරණි උප
බහලුම්වල

3
මා සතුව ඉඩ ඇති ලිපිගොනු ඇති විට විනෝදජනක විය හැකිය. උදා: "test one" නමින් ගොනුවක් සහ rm පෝෂණය වේ rm test one. (එමඟින් "ටෙස්ට්" නමින් ගොනුවක් සහ "එකක්" නමින් ගොනුවක් මකා දැමෙනු ඇත, නමුත් "ටෙස්ට් වන්" නම් ගොනුවක් නොවේ). ඉඟිය: -delete හෝ -print0
Hennes

6
පැති සටහනක් ලෙස, පිළිතුරේ පළමු පේළියේ සඳහන් කර ඇති පරිදි, විශේෂ අක්ෂර සමඟ ගැටලු මඟහරවා ගැනීම සඳහා සපයන ලද තර්කය සැමවිටම උපුටා දක්වන්නfind . උදා:find /path/to/files/ -exec somecommand '{}' \;
වොල්ෆ්

Answers:


272

Rm වෙත පයිප්ප දැමීමේදී විශේෂ ගොනු නම් (අවකාශ, උපුටා දැක්වීම්) සමඟ ප්‍රවේශම් වන්න.

ආරක්ෂිත විකල්පයක් ඇත - -delete විකල්පය:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

වෙනම rm ඇමතුමක් නැති අතර ගොනු නාම ගැන කරදර වීමට අවශ්‍ය නැත.

වෙනුවට -deleteසමග -depth -printඔබ එය ක්රියාත්මක පෙර (මෙම විධානය පරීක්ෂා කිරීමට -deleteගම්ය -depth).


27
-type fලිපිගොනු මකා දැමීමට පමණක් භාවිතා කරන්න (සහ උප නාමාවලි තබා ගන්න)
ඔලෙග්

3
විකල්පයක් ලෙස, ඔබට දින පහකට වඩා අළුත් සියලුම ලිපිගොනු සඳහා එකම දේ කිරීමට අවශ්‍ය නම්: / path / to / directory / -mindepth 1 -mtime -5 -delete
zmonteca

මගේ මාර්ගයේ අවකාශ තිබේ නම් මා එය කළ යුත්තේ කෙසේද? find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete?
පැට්‍රික් ග්‍රෙගෝරියෝ

3
om uom-pgregorio උපුටා දැක්වීම්වල මාවත තැබීමට මම යෝජනා කරමි.
atripes

5
සෑම findතර්කයක්ම පෙර පෙරනයේ ප්‍රති result ලය ආදානය ලෙස භාවිතා කරන පෙරණයක් බව සලකන්න . එබැවින් අවසාන තර්කය ලෙස -delete එකතු කිරීමට වග බලා ගන්න. IE: find . -delete -mtime +5වත්මන් මාවතේ ඇති සියල්ල මකා දමනු ඇත.
ජොහාන්

18

මෙම විධානය වැඩිපුර ගොනු සොයාගත් විට එය ක්‍රියාත්මක නොවන බව සලකන්න. එය මෙවැනි දෝෂයක් ලබා දෙනු ඇත:

bash: /usr/bin/find: Argument list too long

විධාන රේඛාවක දිගට ක්‍රියාත්මක කිරීමේ පද්ධතියේ ඇමතුමේ සීමාව ඉක්මවා යන අර්ථය. Rm ඒ ආකාරයෙන් ක්‍රියාත්මක කරනවා වෙනුවට xargs භාවිතා කිරීම වඩා කාර්යක්ෂම වේ . ක්‍රියාත්මක වන උදාහරණයක් මෙන්න:

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

මෙමඟින් දින 14 කට පෙර / root / Maildir යටතේ පුනරාවර්තනය කරන ලද සියලුම ගොනු (f වර්ගය) ඉවත් කර නැවත නැවත ගැඹුරින් (ගැඹුරු 1) ඉවත් කරනු ඇත. තවත් විකල්ප සඳහා සොයා ගැනීමේ අත්පොත බලන්න .


8
AskUbuntu ( askubuntu.com/questions/589210/removing-files-older-than-7-day ) පිළිබඳ අෆ්ෂින් හමීඩිගේ පිළිතුරට අනුව, නව රේඛා සහ විශේෂ අක්ෂර අඩංගු ලිපිගොනු සමඟ ප්‍රවේශම් වන්න. ඒ වෙනුවට භාවිතා කරන්නfind /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
Cbhihe

2
හෝ සොයාගත්
ප්‍රති results ල

9

එය එසේම ය. ලිපිගොනු උපසර්ගයට වඩා ඔබ මව් නාමාවලිය සැපයිය යුතුය. ඔබේ උදාහරණයේ දී:

find /path/to -type f -mtime +5 -exec rm {} \;

මෙමඟින් දින 5 කට වඩා පැරණි සියලුම ලිපිගොනු /path/toසහ එහි උප නාමාවලි මකා දැමෙනු ඇත .

හිස් උප නාමාවලි මකා දැමීමට, ඉහත ostCostas අදහස් බලන්න.


4
සෑම ගොනුවක් සඳහාම ඔබ rm විධානය ක්‍රියාත්මක කරන බව සලකන්න. ඔබ සතුව දින 5 කට වඩා පැරණි ලිපිගොනු 1000 ක් තිබේ නම් rm 1000 වතාවක් ආරම්භ වේ. මේ හේතුව නිසා කොස්ටාගේ අදහස් දැක්වීමේදී මෙන් -delete විකල්පය සලකා බලන්න හෝ -exec rm {} \ +
Hennes

En හෙනස්: - 1) +එම අවස්ථාවේදී ඔබ පැන යා යුතු යැයි විශ්වාස නැත . - 2) -exec rm '{}' +විශේෂ අක්ෂර (අවකාශ, නව රේඛා, ආදිය ...) සහිත ලිපිගොනු වල නපුරුකම් වලක්වා ගැනීම සඳහා ලිවීමට වඩා හොඳය .
Cbhihe

-2
find . -mtime +3 -type f -not -name '*pid*' |xargs rm -rf

මෙය දැනට පවතින ප්‍රශ්නයට බෙහෙවින් සම්බන්ධ නැති බව පෙනේ.
කුසලනන්ද
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.