නාමාවලියකින් සියලුම ගොනු ඉවත් කරන්නේ කෙසේද?


324

මම ළඟම ඇති දෙයයි

# rm /path/to/directory/*.*

නමුත් දිගුවක් නොමැති ගොනු සඳහා එය ක්‍රියා නොකරයි ...


මෙහි පිළිතුර බලන්න, මෙය සැඟවුණු ලිපිගොනු ඉවත් කළ හැකි අතර ඕනෑම අනතුරු ඇඟවීමක් සහ ඩිරෙක්ටරියක් මකා දැමිය
සංවර්ධක

Answers:


374

ලිනක්ස් දිගු භාවිතා නොකරයි. නමට දිගුවක් තිබිය යුතුද යන්න තීරණය කිරීම ගොනුවේ නිර්මාතෘගේ වගකීම වේ. ලිනක්ස් පළමු බයිට් කිහිපය දෙස බලන්නේ එය කුමන ආකාරයේ ගොනුවක් සමඟද යන්න සොයා ගැනීමටය.

  • නාමාවලි භාවිතයේ සැඟවී නැති සියලුම ගොනු ඉවත් කිරීමට *:

    rm /path/to/directory/*
    

    කෙසේ වෙතත්, මෙය එක් එක් උප බහලුම සඳහා දෝෂයක් පෙන්වනු ඇත, මන්ද මෙම ප්‍රකාරයේදී ගොනු මකා දැමීමට පමණක් අවසර ඇත.

  • නාමාවලි භාවිතයේදී සැඟවී නැති සියලුම ගොනු සහ උප නාමාවලි (ඒවායේ සියලුම අන්තර්ගතයන් සමඟ) ඉවත් කිරීම සඳහා:

    rm -r /path/to/directory/*
    

* සැඟවුණු ලිපිගොනු සහ නාමාවලි යනු .(තිත) අක්ෂරයෙන් ආරම්භ වන අය , උදා: .hidden-fileහෝ .hidden-directory/. Bash හි, dotglob විකල්පය (පෙරනිමියෙන් අක්‍රිය) සකසා rmඇත්නම් , සැඟවුණු ලිපිගොනු වලද ක්‍රියා කරනු ඇති බව සලකන්න, මන්ද ඒවා *ගොනු නාම තර්ක ලැයිස්තුවක් සැපයීම සඳහා කවචය මඟින් පුළුල් කළ විට ඒවා ඇතුළත් වන බැවිනි .


14
ක්‍රියාත්මක shopt -s dotglobවීමට පෙර සැඟවුණු ලිපිගොනු මකා දැමීමට ඔබට අවශ්‍ය නම්rm (...)
danjjl

9
* අර්ථය all files;) *.*අඩංගු සියළුම ගොනු අදහස් .නාමයෙන් කොහේ හරි
Rinzwind

10
In රින්ස්වින්ඩ්, වඩාත් නිවැරදිව, තරු ලකුණෙහි තේරුම “ඕනෑම අක්ෂරයක ශුන්‍ය හෝ ඊට වැඩි” යන්නයි. එබැවින් *a*අක්ෂර ශුන්‍ය හෝ වැඩි ගණනක් අදහස් වන අතර ඉන්පසු අක්ෂර ශුන්‍ය හෝ වැඩි ගණනක් අනුගමනය කරයි a. එය ගොනු නාමය ගැලපෙන බව happy, apple, aහෝ la.
අපකීර්තිමත් ගෝට්

7
78 user784637 ඔබ ඉතා පහසුවෙන් විශ්මයට පත් වේ
barlop

2
rm -r /path/to/directoryඩිරෙක්ටරියෙන් මිදෙනවා හැර මම දැන් භාවිතා කර ඇත්තෙමි . අවම වශයෙන් මේ ආකාරයෙන් ඔබට සැඟවුණු ලිපිගොනු ඉවත් කළ හැකිය
කොලොබ් කැනියොන්

190
  • ෆෝල්ඩරය එහි සියලුම අන්තර්ගතයන් ඉවත් කිරීමට ( සියලුම අභ්‍යන්තර ෆෝල්ඩර ඇතුළුව ):

    rm -rf /path/to/directory
    
  • ෆෝල්ඩරයේ සියලුම අන්තර්ගතයන් ඉවත් කිරීම සඳහා ( සියලුම අභ්‍යන්තර ෆෝල්ඩර ඇතුළුව ) නමුත් ෆෝල්ඩරයම නොවේ:

    rm -rf /path/to/directory/*
    

    හෝ

    rm -rf /path/to/directory/{*,.*}
    

    සැඟවුණු ලිපිගොනු / නාමාවලි ද ඉවත් කර ඇති බවට ඔබට සහතික වීමට අවශ්‍ය නම්.

  • ෆෝල්ඩරයක් තුළ ඇති සියලුම "ගොනු" ඉවත් කිරීමට ( අභ්‍යන්තර ෆෝල්ඩර ඉවත් නොකිරීම ):

    rm -f /path/to/directory/{*,.*}
    


  • අවවාදයයි : ඔබේ මාර්ගයේ ඉඩ තිබේ නම්, සෑම විටම මිල ගණන් භාවිතා කිරීමට වග බලා ගන්න.

    rm -rf /path/to the/directory/*
    

    වෙනම rm -rfඇමතුම් 2 කට සමාන වේ :

    rm -rf /path/to
    rm -rf the/directory/*
    

    මෙම ගැටළුව මඟහරවා ගැනීම සඳහා, ඔබට 'තනි උපුටා දැක්වීම් '( ෂෙල් විචල්‍යයන් පුළුල් නොකරයි ) හෝ "ද්විත්ව උපුටා දැක්වීම් "( ෂෙල් විචල්‍යයන් පුළුල් කරයි ) භාවිතා කළ හැකිය:

    rm -rf "/path/to the/directory/"*
    


කොහෙද:

  • rm- " ඉවත් කිරීම " යන්නෙන් අදහස් කෙරේ
  • -f- " බලය " යන්නෙන් අදහස් කරන්නේ ඔබට ලේඛනාගාරයක් ඉවත් කිරීමට අවශ්‍ය නම් ඔබෙන් විමසීමට / විමසීමට අකමැති විට එය ප්‍රයෝජනවත් වේ.
  • -r- “ පුනරාවර්තන ” යන්නෙන් අදහස් වන්නේ ඔබට සෑම ෆෝල්ඩරයක්ම පුනරාවර්තනය වී සියල්ල ඉවත් කිරීමට අවශ්‍ය බවයි.

8
පිළිගත් ලෙස සලකුණු කර ඇති පිළිතුරට ඉහළින් හා ඉහළින් මෙය වඩාත් පුළුල් හා ප්‍රයෝජනවත් පිළිතුරක් බව මට පෙනී ගියේය.
දේවානුභාවයෙන්

2
rm -rf /path/to/directory/*ෆෝල්ඩරයේ සැඟවුණු ගොනුවක් ඉවත් නොකරයි .htaccess. සමහර විට rm -rf /path/to/directory/.? එය උත්සාහ කර නැත.
මාර්ක් බෙරී

Ark මාක්බෙරි rm -rf /path/to/directory/.*
ලිලියන් ඒ. මොරාරු

Il ලිලියන් ඒ.මොරාරු, මම අද යම් පරීක්ෂණයක් කළා. rm -rf /path/to/directory/.*නිශ්චිත නාමාවලියෙහි සැඟවුණු ගොනුව (ය) පමණක් මකා දමයි. @ රින්ස්වින්ඩ්ගේ පිළිතුර පිළිබඳ @ danjjl ගේ අදහස දෙස, සැඟවුණු ලිපිගොනු මකා දැමීමට, ධාවනය shopt -s dotglobවීමට පෙර ධාවනය කරන්න rm -rf /path/to/directory/*.
මාර්ක් බෙරී

අවවාදයයි: rm -rf /path/to/directory/.*මගේ පද්ධතියේ ඇති අයිතම මකා දැමීමට හේතු විය /path/to. වාසනාවකට මෙන්, මම මගේ සම්පූර්ණ දත්ත වෙනම තැටියකට උපස්ථ කර ඇත. rm -rf /path/to/directory/.*ඔබ ඔබේ මුළු පරිගණකයම වෙනම / ආරක්ෂිත ස්ථානයකට උපස්ථ කර ඇත්නම් මිස විධානය නිකුත් නොකරන්නැයි අමුතුවෙන් කිව යුතු නැත !
නීති ලැයිස්තුව

45

නාමාවලියෙහි ඇති සියලුම ගොනු ඉවත් කිරීමට (සැඟවුණු ගොනු සහ උප බහලුම් ඇතුළුව) ධාවනය කරන්න:

rm -rf /path/to/directory/{*,.*}

1
මෙය ලස්සන පිළිගත් පිළිතුර විය යුතුය. ඔබට ස්තුතියි!
Nam G VU

6
මෙම ග්ලෝබ් ගැලපෙන්නේ නැත "." සහ ".." ද?
hertzsprung

6
@hertzsprung - එය, සහ එය ඔබ එය මකා දැමිය නොහැකි බව අනතුරු ඇඟවීමක් දෙනවා ./හා ../, නමුත් එය තවමත් සඟවා ගොනු මැකීමට ඇත.
රයන් වීල්

මෙය මැක් කොන්සෝලය මත ක්‍රියා නොකරයි, සැඟවුණු ලිපිගොනු තවමත් එම විධාන රේඛාව සමඟ පවතී.
agapitocandemor

වත්මන් නාමාවලිය සියල්ල ඉවත් කිරීමට:rm -r $(pwd)/{*,.*}
ජිමී ඇඩාරෝ

11

ඔබට / path / to / බහලුමේ ඇති ගොනු පමණක් මකා දැමීමට අවශ්‍ය නම් ඔබට කළ හැකිය

find /path/to/directory -type f -print0| xargs -0 rm 

හෝ

find /path/to/directory -type f -exec rm '{}' \;

ඔබට බර පැටවීම කළ හැකිය find, වාසිය නම් ඔබට සොයාගත් දේ නල මාර්ගයකින් තොරව ලැයිස්තු ගත කළ හැකි වන අතර rmඑමඟින් ඔබ ආරම්භ කිරීමට පෙර මකා දැමිය යුතු දේ ඔබට දැකගත හැකිය.


2
GNU findලෙස -deleteසංජානන. ඔබ තවමත් භාවිතා කිරීමට අවශ්ය නම් -exec, ආදේශ \;සමග +රැස් කරනු ඇත rmඇමතුම් එකට, කාර්යක්ෂමතාව වැඩි.
enzotib

1
'+' සහිත විශාල ගොනු ප්‍රමාණයක් ගැටළු ඇති කරයි, මන්ද ලැයිස්තුව rm -f * හා සමාන වේ. එකම ෆෝල්ඩරයකින් ගොනු විශාල ප්‍රමාණයක් ඉවත් කිරීමේදී (මිලියන් වලින් කථා කිරීම) දෙකම හොඳ නැත :) අවසානයේදී C ++ පැමිණ dir-tree හි ඉනෝඩ අනුපිළිවෙලට ගොනු ඉවත් කළේය.
ඔසිස්

3
ඔබ සැබවින්ම එකතු කළ යුතුයි - rm පසු. එසේ නොමැතිව ඔබට ගොනු නාමයක් තිබේ නම් -rf හෝ ඊට සමාන rm සඳහා තර්ක ලෙස අර්ථ දැක්වේ. උදා: xargs -0 rm - හෝ -exec rm - {} \;
රිච්ම්

ඔබට xargs සඳහා -n තර්කය සැපයිය හැකිය. එමඟින් උපරිම
විස්තාරණ

1
සොයා ගැනීම කිසිදු උප බහලුමකින් ලිපිගොනු ලබා නොදෙන බව සහතික කිරීම සඳහා ඔබට -maxdepth 1 එකතු කළ හැකිය. එනම් / path / to / directory -maxdepth 1 -type f
Richm

10

නාමාවලියක ඇති සියලුම ගොනු සහ නාමාවලි ( සැඟවුණු ඒවා ඇතුළුව ) මකා දැමීමට , ඔබට පහත සඳහන් දෑ උත්සාහ කළ හැකිය:

  • ෆෝල්ඩරය මකා දමා නැවත ප්‍රතිනිර්මාණය කරන්න

    rm -rf dir_name && mkdir dir_name
    
  • භාවිත find

    find dir_name -mindepth 1 -delete  
    

මෙහිදී අපි -mindepth 1dir_name නාමාවලිය බැහැර කිරීමට නියම කරමු .
පහත සබැඳිය දෙස බලන්න:
/unix/12593/how-to-remove-all-the-files-in-a-directory


ඔබගේ උපදෙස් වලට ස්තූතියි, මම සබැඳි සඳහා වැඩි විස්තරයක් එක් කළෙමි.
zeekvfu

6
ෆෝල්ඩරය මකා දමා නැවත නිර්මාණය කිරීමෙන් මෙම ෆෝල්ඩරය සඳහා විවිධ / වැරදි අවසරයන් ලැබිය හැකි බැවින් ප්‍රවේශම් වන්න!
einjohn

6

ඔබට සියලු උප බහලුම් සහ නාමාවලියම ඉවත් කිරීමට අවශ්‍ය නම්, ඔබට භාවිතා කළ හැකිය rm -rf /path/to/directory. නමුත් නැවත එබීමට පෙර සෑම විටම ඔබේ රේඛාව දෙවරක් පරීක්ෂා කරන්න, rm -rfබොහෝ විනාශයන් ද ඇති කළ හැකිය, උදා: ඔබ සුපර් යූසර් අවසරයන් තිබියදී පළමු කප්පාදුවෙන් පසුව අහම්බෙන් ඉඩක් ඇතුල් කළහොත් ...


1

මම මෙය මා විසින්ම සොයන විට මෙම ප්‍රශ්නය නිරන්තරයෙන් ගූගල් හි ඉහළින්ම ඇති බැවින්:

අනෙක් පිළිතුරු විවිධ ගැටළු වලින් පීඩා විඳිති:

  1. ඒවායින් සමහරක් ඇතුළත් වන .අතර ..ඒවා is ෝෂාකාරී, ව්‍යාකූල සහ කරදරකාරී ය.

  2. ඒවායින් සමහරක් සැඟවුණු ලිපිගොනු අමතක කරයි (තිතක් සමඟ ආරම්භ වන ගොනු).

  3. නාමාවලි මකා දැමීමට ඉඩ දීම සඳහා ඒවා නිවැරදි (ගැඹුරුම-පළමු) අනුපිළිවෙලින් මකා නොදමනු ඇත.

  4. ඒවා බොහෝ විට නුසුදුසු වෙනත් (සවිකර ඇති) ගොනු පද්ධති වලට බැස යයි.

  5. අමතර පරාමිතීන් සමඟ ඒවා නිසියාකාරව දිගු කිරීම දුෂ්කර ය (පහත වැඩි විස්තර).

එබැවින්, නාමාවලියක ඇති සියලුම ලිපිගොනු සහ ෆෝල්ඩර නැවත මකා දැමීමට, මෙය කරන්න:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

-xdevසවි කිරීම් වලට බැසීම වැළැක්වීම සඳහා මම තර්කයක් එක් කළ බව සලකන්න ( /procආදිය).

ඇයි නැත්තේ -depthහෝ -delete?

මේ සඳහා මිනිසුන් නිරන්තරයෙන් මාව පහත් කොට සලකන නමුත්, එම ක්‍රමවල අවාසියක් ඇත: -pruneඋප බහලුමක් (වැඩි ගැටළු හඳුන්වා නොදී) ඇතුළත් කිරීමට ඉඩ දිය හැකි තරම් ඒවා විස්තාරණය කළ බවක් නොපෙනේ . මෙම ක්‍රමයට වෙනස්ව, ඔබට ඇතුළු කළ හැකිය

-not \( -path "${DIR}/subdir" -prune \)

එහි අන්තර්ගතය මකා දැමීමෙන් -mindepthබැහැර කිරීමට තර්කයට පෙර subdir.


ගැඹුර-පළමු ඇණවුම සඳහා, ඒ සඳහා -depthධජයක් ඇත find.
සර්ජි කොලොඩියාෂ්නි

අහ් ... ඇයි දැන් භාවිතා නොකළ -deleteසමගfind ? -deleteගැඹුර-පළමුවැන්නයි. ඔබ මේ වන විටත් පොසික්ස් නොවන බව උපකල්පනය findකර ඇත -printf, එබැවින් ඔබත් භාවිතා කළ හැකිය-delete-depth -print0 | xargs -0 rm
මුරු

මුරු: මම වඩා හොඳින් නොදැන සිටි නිසා ... මම එය වෙනස් කරමි.
user541686

ur මුරු: ඇත්තටම, ඔබේ ක්‍රමය සමඟ ක්‍රියා නොකරන බව පෙනේ -not \( -path "$DIR/subdir" \)... නමුත් මගේද ? මන්ද?
user541686

E මෙහර්දාඩ් කුමක් කළ යුතුද?
මුරු

0

ඔබට cdඩිරෙක්ටරියට ඇතුළු වී rm *.*ඔබට මතක නම් ඩොස් හි මෙන් විධානය ක්‍රියාත්මක කරන්න.


1
DOS යනු ගොනු සඳහා DEL වන අතර හිස් කළ නාමාවලි සඳහා RMDIR- සහ සැඟවුණු සහ පද්ධති ලිපිගොනු වල ATTRIB ගුණාංග පළමුව ඉවත් කළ යුතුය. එතරම් සරල නැත;)
එරික්

0

වත්මන් නාමාවලිය මකා දැමීමට, ඔබට උදාහරණයක් ලෙස භාවිතා කළ හැකිය rm -d ./*

-d ඩිරෙක්ටරි ද මකා දැමීමට පවසයි.

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.