වත්මන් නාමාවලියෙහි නිශ්චිත දිගුවක සියලුම ගොනු නැවත නැවත මකා දැමිය හැක්කේ කෙසේද?


596

.bakවත්මන් නාමාවලියෙන් සහ එක් විධාන රේඛාවක් භාවිතා කරන සියලුම උප ෆෝල්ඩර වලින් නිශ්චිත දිගුවක් (උදා ) සහිත සියලුම ගොනු ආරක්ෂිතව මකා දැමිය හැක්කේ කෙසේද? සරලවම, මම rmඑය වරක් වැරදි ලෙස භාවිතා කළ බැවින් භාවිතා කිරීමට බිය වෙමි, දැන් මට උපදෙස් අවශ්‍යය.


Answers:


936

ඔබ rmබිය වන්නේ නම් මෙම නඩුවේදී භාවිතා කිරීමට පවා ඔබට අවශ්‍ය නැත . භාවිතා කරන්න find:

find . -name "*.bak" -type f -delete

නමුත් එය පූර්වාරක්ෂාව සමඟ භාවිතා කරන්න. පළමුව ධාවනය කරන්න:

find . -name "*.bak" -type f

ඔබ ඉවත් කරන්නේ කුමන ගොනුදැයි හරියටම බැලීමට.

එසේම, එය-delete ඔබගේ විධානයෙහි අවසාන තර්කය බව තහවුරු කරගන්න . ඔබ එය පෙර තැබුවහොත් -name *.bak argument, එය සියල්ල මකා දමනු ඇත .

වැඩි විස්තර සඳහා බලන්න man findසහ man rmSE හා සම්බන්ධ මේ ප්‍රශ්නයද බලන්න:


මෙය වෙනස් වන්නේ rm *.bakකෙසේද?
sayantankhan

14
@ බෝල්ට් 64 ඔබේ rm *.bakඋප බහලුම් සඳහා ක්‍රියා නොකරනු ඇත.
රාදු රදනු

පෙරනිමි සැකසුම් rm *.bakසමඟ වත්මන් ඩිරෙක්ටරියේ .bak සමඟ අවසන් වන සියලුම ගොනු පමණක් මකා දැමෙනු ඇත. ඔබට ග්ලෝබ් සමඟ සම්බන්ධ වීමට, -r විකල්පය භාවිතා කිරීමට හෝ සොයා ගැනීමේ උදාහරණය භාවිතා කිරීමට අවශ්‍ය උප බහලුම්වල දේවල් කිරීමට.
හෙනස්

9
En හෙනස් පරිස්සම් වන්න rm -r *.bak! එමඟින් .bakඒවායේ සියලුම අන්තර්ගතයන්ගෙන් අවසන් වන නාමාවලි ඉවත් කරයි .
රාදු රදනු

42
-deleteඑය ඔබගේ විධානයේ අවසාන තර්කය බව තහවුරු කරගන්න . ඔබ එය -name *.bakතර්කයට ඉදිරිපත් කළහොත් එය සියල්ල මකා දමනු ඇත.
මයිකල් - කොහෙද මැටි ෂිර්කි

41
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f

1
Askubuntu වෙත සාදරයෙන් පිළිගනිමු! මෙය පරිපූර්ණ වලංගු පිළිතුරක් වන අතර, -deleteධජය වෙනුවට මෙය භාවිතා කිරීමෙන් කිසිදු වාසියක් ඇතැයි මම නොසිතමි find. සොයාගැනීම් සමඟ ලිපිගොනු මකා දැමීම සඳහා වැඩි විස්තර GNU අත්පොතෙහි සොයාගත හැකිය .
ග්ලූටනයිට්

2
ඔබ බොහෝ විට හරි, එය විකල්ප විසඳුමක් පමණයි, සමහර විට වඩා
අමුයි

13
මෙය විකල්පයක් පමණක් නොව '|' නළය සමඟ වෙනත් විධානයන් ඒකාබද්ධ කළ හැකි ආකාරය පිළිබඳ උදාහරණයකි. +1
බොරිස් පව්ලොවික්

15
මෙම විකල්ප විසඳුම් ක්‍රියා විරහිත (සිග්වින් වැනි) නොමැති වෙනත් පරිසරයන් මත ක්‍රියා කරයි
සිරියාර්ට්

2
මම හිතන්නේ මෙය මෙහි හොඳම පිළිතුරයි.
Léo Léopold Hertz 준영

37

පළමුව විධානය ක්‍රියාත්මක කරන්න shopt -s globstar. ඔබට එය විධාන රේඛාවෙන් ධාවනය කළ හැකි අතර, එය ක්‍රියාත්මක වන්නේ එම කවච කවුළුව තුළ පමණි. ඔබට එය ඔබගේ තුළට දැමිය හැකිය .bashrc, එවිට අලුතින් ආරම්භ කරන ලද සියලුම ෂෙල් වෙඩි එය ලබා ගනී. එම විධානයේ ප්‍රති is ලය වන්නේ **/වත්මන් ඩිරෙක්ටරියේ සහ එහි උප බහලුම්වල ගැලපෙන ලිපිගොනු පුනරාවර්තනය කිරීමයි (පෙරනිමියෙන් **/අදහස් කරන්නේ එකම දෙයයි */: ක්ෂණික උප බහලුම්වල පමණි). ඉන්පසු:

rm **/*.bak

(හෝ gvfs-trash **/*.bakඔබට ඇත්තේ කුමක්ද).


ස්තූතියි වැඩ AR
අරිෆ් මහමුද් රානා

22

ලිපිගොනු මකා දැමීම මට ඔබ භාවිතා කළ යුතු දෙයක් නොවේ rm. මෙන්න විකල්පයක්:

sudo apt-get install gvfs     # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash"    # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak                   # trash the files (thus moving them to the trash bin)

අදහස් දැක්වීමේදී ෆ්ලිම් පවසන පරිදි:

මෙම පැකේජය trash-cliමෙන් ම දෙයක් කරනවා gvfs-trashgvfs මත රඳා පැවැතීමට තොරව.

ඒ නිසා:

sudo apt-get install trash-cli

මේ සඳහා ඔබට අන්වර්ථයක් සෑදීමට අවශ්‍ය නැත, මන්ද trash-cliපැකේජය විධානයක් සපයන trashඅතර එය අපට අවශ්‍ය දේ කරයි.

එලියා කගන් පුළුල් අදහස් දැක්වීම් වලින් පැහැදිලි කරන පරිදි, ඔබට මෙම පුනරාවර්තන භාවිතයෙන්ද කළ හැකිය find. එවැනි අවස්ථාවකදී ඔබට අන්වර්ථයක් භාවිතා කළ නොහැක, එබැවින් පහත විධානයන් ඔබ ස්ථාපනය කර ඇතැයි උපකල්පනය කරයි trash-cli. මම එලියාගේ අදහස් සාරාංශ කරමි:

මෙම විධානය මඟින් .bakවත්මන් නාමාවලියෙහි හෝ එහි උප බහලුම්වල හෝ ඊට පහළින් ඕනෑම තැනක සියලුම ගොනු සහ සමමුහුර්ත සොයාගෙන ප්‍රදර්ශනය කරයි .

find . -name '*.bak' -xtype f

ඒවා මකා දැමීමට, විධානය -execසමඟ එකතු කරන්න trash:

find . -name '*.bak' -xtype f -exec trash {} +

-xtype fලිපිගොනු සහ ලිපිගොනු ගොනු වලට තෝරයි, නමුත් ෆෝල්ඩර නොවේ. .Bak ෆෝල්ඩර ද මකා දැමීමට, එම කොටස ඉවත් කර භාවිතා කරන්න -execdir, එමඟින් නාමාවලි තුළ ඇති ගොනු වල cannot trash non-existentදෝෂ මඟහරවා ගත හැකිය :.bak.bak

find . -name '*.bak' -execdir trash {} +

4
" rmදේවල් මකා දැමීමට භාවිතා නොකරන්න " යනු මතභේදාත්මක ප්‍රකාශයකි, නමුත් බොහෝ විට ඔබට දේවල් අහෝසි කිරීමට ඉඩ දෙන යමක් භාවිතා කිරීම වඩා er ානවන්ත බව මම පිළිගත යුතුය.
ඔලි

2
පැකේජය යැපීමකින් තොරව trash-cliඑකම දේ කරයි . gvfs-trashgvfs
Flimm

මම එය පිළිතුරෙන් සංස්කරණය කර ඇත්තෙමි, ඊළඟ වතාවේ ඔබම සංස්කරණය කිරීමට නිදහස් වන්න.
don.joey

answer don.joey මෙම පිළිතුරෙන් මකාදැමීම් find . -name "*.bak" -type fපෙන්වයි trash *.bak. ඇත්තටම ඔබ අදහස් කළේ එයද? ඔබට ඩිරෙක්ටරි කුණු කූඩයට trashහෝ සමඟ ගෙන යා හැකිය gvfs-trash, නමුත් trash *.bakඑය ගෙන යන්නේ ලිපිගොනු සහ නාමාවලි පමණක් වන අතර ඒවා අවසන් .bakවන්නේ වත්මන් නාමාවලියෙහි ය. කවචය පුළුල් *.bakවන බැවින් තමන් විසින්ම නම් කර නොමැති උප බහලුම්වල ගොනු trash *.bakවලට එය බලපාන්නේ .bakනැත .bak.
එලියා කගන්

1
@ don.joey ඔව් ls *.bak(මම හිතන්නේ ඔබ අදහස් කළේ) කුණු කසළ ලැයිස්තුගත trash *.bakකරයි. යටින් ඇති ඕනෑම ලිපිගොනු find . -name '*.bak' -xtype f -exec trash {} +කුණු කූඩයට දමයි . එයට අන්වර්ථයක් භාවිතා කළ නොහැක, එබැවින් ඒ වෙනුවට ස්ථාපනය කරන්න හෝ ලියන්න . මෙන්න උදාහරණයක්. ලිපිගොනු සහ ලිපිගොනු ගොනු වලට තෝරයි, නමුත් ෆෝල්ඩර නොවේ. ෆෝල්ඩර ද මකා දැමීමට , භාවිතා කරන්න , එය නාමාවලි තුළ ඇති ගොනු වල දෝෂ මඟහරවා ගනී . කරුණාකර ඔබේ පිළිතුරේ මේ කිසිවක් භාවිතා කිරීමට නිදහස් වන්න. .bak.trash-cligvfs-trash -xtype f.bak find . -name '*.bak' -execdir trash {} +cannot trash non existent.bak.bak
එලියා කගන්

5

ඔබට කිසියම් වර්ගයක සියලුම ගොනු මකා දැමීමට අවශ්‍ය නම්, නමුත් වත්මන් ෆෝල්ඩරයෙන් "ගැඹුරු" ෆෝල්ඩර 1 ක් පමණි:

find . -maxdepth 2 -name "*.log" -type f -delete

-maxdepth 2 වත්මන් ඩිරෙක්ටරිය " . " පළමු ෆෝල්ඩරය ලෙස ගණන් ගන්නා බැවිනි.


1

ඉක්මන් පිළිතුර:

  • සලකා බැලූ නම හෝ පෝස්ට්ෆික්ස් සහිත සියලුම ලිපිගොනු පුනරාවර්තනය කරන්න:

    find . -name '*.pyc' -type f -delete

  • සලකා බැලූ නම සහිත සියලුම නාමාවලි පුනරාවර්තන ලෙස මකන්න:

    find ~ -path '*/__pycache__/*' -delete‍‍‍
    find ~ -type d -name '__pycache__' -empty -delete‍‍‍
    

    තරමක් අඩු තදින් පාලනය කළ නමුත් තනි පේළියක:

    find ~ -path '*/__pycache__*' -delete
    

[ සටහන ]:

dනාමාවලි විකල්පය වන අතර fඑය ගොනු විකල්පයකි.


0

ඔබ git repo තුළ සිටී නම්, ඔබට මෙය භාවිතා කළ හැකිය:

git clean -fdx

මෙය .gitignore හි සොයා නොගත් ගොනු සහ ගොනු මකා දමයි.


0

ඔබට ලිපිගොනු මකා දැමීමට පෙර ලැයිස්තුව පරීක්ෂා කිරීමට අවශ්‍ය නම්, ඔබට එය ප්‍රතිරාවය කළ හැකිය.

find . -name "*.bak" -type f | xargs echo rm -rf

මෙය xargs හරහා rm විධානයට නල කර ඇති සෙවුම් ප්‍රති results ල ලැයිස්තුගත කරනු ඇත. ලැයිස්තුව ගැන ඔබට සහතික වූ පසු ඔබට ඉහත විධානයෙහි දෝංකාරය අතහැර දැමිය හැකිය.

find . -name "*.bak" -type f | xargs rm -rf

-print0 | xargs -0කෝන්කේස් ලිපිගොනු හැසිරවීමට එකතු කිරීම හොඳ පුරුද්දකි , උදාහරණ test'sමඟින් ඔබට ලබා දෙයි xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 optionහෝ නව රේඛා සහිත ගොනු නාම කැඩී යනු ඇත.
bac0n
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.