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.