“-” (හයිපන් අකා ඩෑෂ් හෝ us ණ) වලින් ආරම්භ වන ගොනුවක් මකා දැමිය හැක්කේ කෙසේද?


379

ඉරක් (යටි ඉරක් හෝ us ණ) සමඟ ආරම්භ වන ගොනුව ඉවත් කරන්නේ කෙසේද -? මම දුරස්ථ OSX සේවාදායකයකට ඇතුළු වී ඇති අතර මෙම ගොනුව මගේ නාමාවලියෙහි ඇත:

tohru:~ $ ls -l
total 8
-rw-r--r--    1 me  staff  1352 Aug 18 14:33 --help
...

--helpCLI එකකින් මට මකා දැමිය හැක්කේ කෙසේද ? මෙම ගැටළුව වරින් වර මට විවිධ ස්වරූපයෙන් හමු වන දෙයක් වන අතර, මෙම ලිපිගොනු නිර්මාණය කිරීම පහසුය, නමුත් ඉවත් කිරීමට අපහසුය.

මම බැක්ස්ලෑෂ් භාවිතා කිරීමට උත්සාහ කර ඇත

rm \-\-help

මම උපුටා දැක්වීම් අත්හදා බැලුවෙමි

rm "--help"

Us ණ (ඉරක් හෝ යටි ඉර) අක්ෂරය විකල්පයක් ලෙස අර්ථ දැක්වීම වළක්වා ගන්නේ කෙසේද?


1
මෙම ප්‍රශ්නය "නමෙන් ආරම්භ වන ගොනුවක් මකා දැමිය හැක්කේ කෙසේද -" ලෙස නම් කර ඇත්නම් එය ඉතා හොඳ වේ.
සැන්ඩි

Andy සැන්ඩි එකඟ විය; ප්‍රශ්නයක අර්ථය වෙනස් කිරීමට මම සාමාන්‍යයෙන් අකමැතියි, නමුත් මේ අවස්ථාවේ දී පිළිගත් පිළිතුර මෙම ගැටලුවට විශේෂිත වේ
මයිකල් මොරොසෙක්

38
a වලින් rm --helpආරම්භ වන ගොනු නාම මකා දැමිය යුතු ආකාරය සැබවින්ම පැහැදිලි කරන තරමක් උත්ප‍්‍රාසාත්මක බව මට පෙනේ -. හොඳ ප්‍රශ්නය කෙසේ වෙතත්.
lesmana

2
@ jw013 සමහර විට පළපුරුදු පරිශීලකයින්ට තේරුම් ගැනීමට පහසුය, නමුත් නවක වදන් සඳහා අධික හා ව්‍යාකූල වේ.
iconoclast

2
මම කාර්යබහුල බොක්ස් වෙතින් rm භාවිතා කරන පද්ධතියක් වෙතට දිව ගියෙමි. උදව් ඇතුළුව සෑම දෙයක්ම අවමයි, එබැවින් rm --help කිසිදු හෝඩුවාවක් ලබා දුන්නේ නැත.
dslake

Answers:


564

විධාන රේඛා විකල්ප විග්‍රහ කිරීම rm නැවැත්වීමට "-" භාවිතා කරන්න:

rm -- --help

1
මම දැනගෙන හිටියා මේ වගේ සරල දෙයක් කියලා ...
බ්‍රයන් රෙහ්බයින්

2
rmවිධානයේ සියලුම අනුවාදයන් --තර්කයට සහය දක්වයිද?
කීත් තොම්සන්

3
E කීත් තොම්සන් - බොහෝ GNU මෙවලම්වල ලක්ෂණයකි, එබැවින් එය බොහෝ GNU නොවන ("ලිනක්ස් නොවන") යුනික්ස් (උදා: BSD ප්‍රභේද හෝ සමහර කාවැද්දූ පද්ධති) මත ක්‍රියා
නොකරනු ඇත

1
ස්තූතියි! ඒකෙන් මගේ දවස බේරුණා. ඇත්ත වශයෙන්ම එය BSD (OSX) සහ වෙනත් විධාන සමඟ ක්‍රියා කරයි!
raskhadafi

8
tedtech, getopt () සහ --පූර්ව GNU (SysIII, 1980) සහ සම්මත / POSIX වේ. ව්‍යතිරේක කිහිපයක් (වැනි echo) හැර සම්මත උපයෝගිතා තේරුම් ගනී --. විකල්ප විග්‍රහ කිරීම සඳහා getopt () API භාවිතා නොකරන්නේ නම් වෙනත් විධානයන් සඳහා YMMV.
ස්ටෙෆාන් චසෙලාස්

236

නැත්නම් ඔබට කළ හැකිය

rm ./--help

2
මට මතක ඇති එක එයයි. "Rm - --help" භාවිතා කිරීම මට සැමවිටම සොයා බැලිය යුතු දෙයකි.
user603

28
මෙම ක්‍රමය සෑම විටම --විශේෂයෙන් සලකන්නේ නැති විධාන සඳහා පවා ක්‍රියාත්මක වේ.
jw013

එය ද වැනි විශේෂයෙන් නම් තර්ක වෙනත් වර්ග (විකල්ප අසල) සඳහා යම් යම් විධාන විශේෂ ප්රතිකාර වළක්වා ගැනීමට ක්රියා -පෙළ උපයෝගිතා හෝ cd, එම foo=barawk...
Stéphane Chazelas

1
ගොනුවක් තනි ඉරකින් ආරම්භ වන විට මෙය ක්‍රියාත්මක වේ rm -- <filename>.
StockB

හොඳ විසඳුමක්, මේ සඳහා ද උදව් කරන්න: mv ./--help / tmp /
muenalan

41

findඑය කිරීමට භාවිතා කරන්න:

find . -name '--help' -delete

මෙය හොඳ ක්‍රමයකි, මන්ද ඔබට තවත් ලිපිගොනු කිහිපයක් තිබේ නම් ඔබට මකා දැමිය හැකි ලිපිගොනු කිහිපයක් තිබේ නම් ඔබට -deleteපළමු විකල්පය නොමැතිව සොයා ගැනීම මඟින් ගොනු වල පෙරදසුන ලැයිස්තුවක් ලබා ගත හැකිය , ඉන්පසු ගොනු ලැයිස්තුව හොඳ යැයි පෙනේ නම් ධාවනය කරන්න එය නැවත සමඟ -delete.

ඇත්ත වශයෙන්ම, ඔබ rmපක්ෂව වැළකී සිටීම find(විශේෂයෙන් පළමු පෙරදසුන සමඟ) හොඳ පුරුද්දක් වන අතර එමඟින් වැරදි මඟහරවා ගැනීමට ඔබට හැකි rm *වනු ඇත.

කෙසේ වෙතත්, එම සොයා ගැනීම ඔබගේ සියලු උප බහලුම් හරහා නැවත ලබා ගන්නා බව සලකන්න, එබැවින් ඔබට මෙය මේ වගේ උප බහලුම් ගැඹුරකින් ක්‍රියාත්මක කිරීමට අවශ්‍ය විය හැකිය:

find . -maxdepth 1 -name '--help' -delete

එය වත්මන් නාමාවලියට සොයා ගැනීම සීමා කරයි.


සොයා බැලීමට ඔබට findලිපිගොනු / ඩර් ලැයිස්තුවක් ලබා දිය යුතුය. ඉතින් find . -name.... -deleteහා -maxdepthඑක්කෝ සම්මත විකල්ප නැහැ.
ස්ටෙෆාන් චසෙලාස්

21

වේගාර් නිල්සන් සහ එඩ්ෆුගේ පිළිතුරු ඉතා හොඳයි. මේ වගේ ගැටලුවකට නිසි විසඳුම්.

දුෂ්කර ගොනුවක් සහිත ඕනෑම ගොනුවක් මකා දැමීමට ඔබට ඉඩ සලසන මෙම ප්‍රශ්නයට පොදු ප්‍රතිචාරයක් එක් කිරීමට මට අවශ්‍යය . පළමුව එහි ඉනෝඩ් අංකය ලබා ගන්නේ ls -iයම් ආකාරයක හෝ යම් ආකාරයකිනි. statඉන්පසු වත්මන් ඩිරෙක්ටරියේ ඇති ලිපිගොනු ඉනෝඩ් අංකය මගින් සෙවීම සහ rmගැලපෙන ඉනෝඩ් අංකයක් සමඟ ගොනුවේ විධානය ක්‍රියාත්මක කිරීම මඟින් ගොනුව ඉවත් කරනු ලැබේ.

find . -inode <inode> -exec rm {}\;

සෑම ගොනු පද්ධතියකම ඉනෝඩ අංක අද්විතීය බැවින් ඔබට මෙය භාවිතා කර ඕනෑම ගොනුවක් ඉවත් කළ හැකිය; යුනිකෝඩ් හෝ ගැලවීමේ අක්ෂර භාවිතා කිරීම. ටයිප් කිරීම කෙතරම් කරදරකාරීද යන්න නිසා මම පේළිය එක් කිරීමට නිර්දේශ කරමි

TAB: menu-complete             # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards

.inputrcඔබ bash භාවිතා කරන්නේ නම් ඔබේ ගොනුවට. හැකි සම්පූර්ණ කිරීම් ලැයිස්තුව හරහා චක්‍රීය කිරීමට මෙය ඔබට ඉඩ සලසයි ( වැඩි විස්තර සඳහා ).


5
මෙම ක්‍රමයට ගැටළු දෙකක් ඇත: 1) ඔබට -delete භාවිතා කළ හැකි විට -exec rm භාවිතා නොකරන්න; 2) find -name '--help' -delete
ඉනෝඩය

මම හිතන්නේ නැහැ ඒක වැඩ කරයි කියලා. එය වත්මන් ඩිරෙක්ටරියේ සහ එහි සියලුම උප බහලුම්වල ඇති සියලුම ලිපිගොනු හරහා ගමන් කරන අතර, එය තවමත් ඉල්ලා සිටින සියල්ලට පසුව rm --help, ගොනුව ඉවත් නොකරයි. භාවිතා කරන්න rm ./--help(හෝ rm -i *.
කීත් තොම්සන්

1
@KeithThompson findඑය ක්රියාත්මක වනු ඇත එසේ, සියළුම ගොනු කිරීමට විධාන රේඛා පරාමිතය මාර්ගය උපසර්ග rm ./--helpහා rm ./sub/dirs/--help. දෙවැන්න නිවැරදි කිරීම සඳහා යමෙකුට එකතු කිරීමට සිදුවනු ඇත -maxdepth 1, නමුත් මේ සියල්ලම අත්‍යවශ්‍යයෙන්ම එඩ්ෆුගේ විසඳුම වඩාත් වටරවුමකින්, කැටි ගැසුණු ආකාරයකින් යොදන අතර එය ඕනෑම වේලාවක -deleteවඩා ආරක්ෂිත වේ -exec rm.
jw013

1
මෙම විධානය සමඟ තවත් එක් ප්රශ්නයක් අතර අවකාශය තිබිය යුතු බවට වන {}හා \;, වෙනත් ආකාරයකින් එය ක්රියා නොකරනු ඇත.
ඉයුජින් එස්

ඉනෝඩ අද්විතීය විය හැකි නමුත් එකම ඉනෝඩයක් සහිත නාමාවලි ඇතුළත් කිරීම් කිහිපයක් තිබිය හැකිය. ඒවා දෘඩ සබැඳි ලෙස හැඳින්වේ. ඒවා එක් ගොනු පද්ධතියකට පමණක් ආවේණික වන බැවින් ඔබට භාවිතා කිරීමට අවශ්‍ය වනු -xdevඇත. එය ක්‍රියාත්මක කිරීමට එය ඔබට උදව් නොකරනු ඇත ls -i --help.
ස්ටෙෆාන් චසෙලාස්


8

ඩෑෂ් සහ අවකාශයන් සහිත ගොනුවක් නිර්මාණය කිරීමෙන් පසුව එය ඉවත් කිරීමේ ලිනක්ස් පාගමන.

පරෙස්සම් වෙන්න! අහම්බෙන් rm -rf /හෝ ඒ හා සමාන කඳුරැල්ල මකාදැමීමේ විධානයක් ක්‍රියාත්මක නොකරන්න .

ඔබ ඉවත් කිරීමට උත්සාහ කරන ඔබගේ ගොනුවට තරු ලකුණු හෝ කප්පාදුවක් තිබේ නම්, ඔබේ මෙහෙයුම් පද්ධතිය මකා දැමිය හැකි අහම්බෙන් .හෝ /*වෙනත් *හෝ වෙනත් ආදේශක කාඩ්පතක් පොම්ප නොකරන්න.

"--Yo yo" නමින් ගොනුවක් සාදන්න

eric@dev ~ $ touch -- "--yo yo"
eric@dev ~ $ ls
bin  --yo yo

පළමුව, සොයා ගැනීම සමඟ එය සොයා ගන්න:

eric@dev ~ $ find . -name "*--yo yo*"
./--yo yo

සොයා ගැනීමේ විධානය මඟින් ඔබට මකා දැමීමට අවශ්‍ය එක් ගොනුවක් පමණක් සොයා ගැනීමට වග බලා ගන්න:

සොයා ගැනීමට, මකා දැමීමට -delete විකල්පය පසු කරන්න:

eric@dev ~ $ find . -name "*--yo yo*" -delete
eric@dev ~ $ ls
bin  

Aaaannd ඒක නැති වෙලා.


2

මිඩ්නයිට් කමාන්ඩර් ( mc) පහසුම වේ, එය පෙන්වා F8 ට පහර දෙන්න;)


3
OP ට විධාන රේඛාවක් (CLI) විසඳුමක් අවශ්‍යයි.
ෆ්‍රැන්චෙස්කෝ ටර්කෝ

1
මිඩ්නයිට් කමාන්ඩර් යනු සීඑල්අයි විසඳුමකි. එය ස්ථාපනය කිරීමට ඔබේ පැකේජ කළමනාකරු භාවිතා කරන්න. (එය ssh හරහා පවා ක්‍රියාත්මක වේ ...) en.wikipedia.org/wiki/Midnight_Commander
daviewales

6
කොහොමද apt-get install mc || yum install mc; mc විවිධ ඊතල යතුරු සහ F8 වඩා පහසු rm ./--help?
ජොෂ්

3
@daviewales: මධ්යම රාත්රියේ හමුදාපති වේ ආරම්භ විධාන රේඛාවේ සිට, සහ එය දිවෙන ටර්මිනලය, නමුත් මධ්යම රාත්රියේ හමුදාපති තුළ මෙම සියලු යතුරු පුවරුව ක්රියා CLI තාක්ෂණය (විධාන රේඛා අතුරුමුහුණත) සිට නොවේ - ඔවුන් මධ්යම රාත්රියේ හමුදාපති අතුරුමුහුණත සිට ඇත. - සාමාන්‍යයෙන්, විධාන රේඛා උපයෝගිතා ස්ක්‍රිප්ට් එකක් තුළ ධාවනය කළ හැකිය (ව්‍යතිරේකය යනු විධාන රේඛා ඉතිහාසයයි)
පීටර්.ඕ

1

මෙන්න මේ ත්‍රෙඩ් එක හොයාගන්න කලින් මම පාවිච්චි කළ විසඳුමක්. නාමාවලිය 'සංස්කරණය කිරීමට'
භාවිතා vimකරන්න:

vim .

ඉන්පසු (vim වලින්) ඔබේ ගොනුව තෝරන්න, ඩෙල් පහර දී මකාදැමීම තහවුරු කරන්න.
ඔබ අවසන් වූ පසු ඔබ සමඟ ඉවත්ව යන්න:q


-1

නාමාවලි නාමය උපසර්ගය ලෙස එක් කිරීමට ඔබ උත්සාහ කර තිබේද:

$ rm ./-filename.txt dirname/-filename2.txt
$ mv ./-filename.txt filename.txt
$ cp teste ./-teste

සාමාන්‍යයෙන් ගොනුවේ උපසර්ගයක් ලෙස නාමාවලිය භාවිතා කිරීම විග්‍රහ කිරීමේ ශ්‍රිතය මඟින් විධාන විකල්පයක් ලෙස “us ණ” අක්‍ෂරය වැරදි ලෙස අර්ථ නිරූපණය කිරීමෙන් වළක්වා ගත හැකිය.


1
මෙය දැනටමත් පෙර පිළිතුරකින් ආවරණය වී ඇති බව මම විශ්වාස කරමි .
කුසලනන්ද

-3

ඔබට ගොනුව නැවත නම් කිරීමට අවශ්‍ය නම් -.bar, (mv ක්‍රියා නොකරනු ඇත), මෙය උත්සාහ කරන්න:

cat >foo.bar <-.bar

විධානය භාවිතා කිරීමට පෙර:

rm -- -.bar

Foo.bar හි මුල් ගොනුවේ අන්තර්ගතය පරීක්ෂා කිරීමට ඔබට හැකි විය යුතුය


5
ගොනුවේ පිටපතක් සෑදීම එය නැවත නම් කිරීම සඳහා ඉතා කාර්යක්ෂම විසඳුමක් නොවේ.
jw013

1
ඔබට vidir භාවිතා කළ හැකිය; නමුත් එය බොහෝ විට (හෝ ඊටත් වඩා) අකාර්යක්ෂම - හා වඩා භයානක ය.
ස්ටීවන් මෙනේෂියන්
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.