විධාන රේඛාවෙන් ගොනුවක අන්තර්ගතය ඉවත් කරන්නේ කෙසේද?


306

මට ල log ු-සටහන් ගොනුවක් ඇති අතර එහි තවදුරටත් දේවල් අවශ්‍ය නොවේ. මට අන්තර්ගතය ඉවත් කිරීමට අවශ්‍යයි.

තිරයට අන්තර්ගතය මුද්‍රණය කරන්නේ කෙසේදැයි මම දනිමි:

cat file.log

ගොනුව සංස්කරණය කරන්නේ කෙසේදැයි මම දනිමි, රේඛීයව:

nano file.log

නමුත් එක් එක් පේළිය එකවර මකා දැමීමට මට අවශ්‍ය නැත. ගොනුව විනාශ නොකර එක් විධානයකින් එය කිරීමට ක්‍රමයක් තිබේද?

Answers:


510

කඩිනමින්

> filename

කරන්නම්. මෙය ඔබට හිස් ගොනු නාමයක් ලබා දෙනු ඇත.

PS: ඔබට sudoඇමතුමක් අවශ්‍ය නම් කරුණාකර මෙහි පිළිතුරුtruncate ලෙස භාවිතා කිරීමට සලකා බලන්න .


63
මෙය බොහෝ විට ගණනය ඉතිහාසයේ raddest වන විධානය
blarg

7
ඊට පටහැනිව, @ අරෙක්කුසන්ද.ඉරුජසුකින්; වින්ඩෝස් හි ඕනෑම සංස්කරණයක් තුළ එය ඉතා හොඳින් ක්‍රියාත්මක වන අතර, සඳහන් කර ඇති තාක් කල්, ඔබ භාවිතා bashකරන්නේ ඔබේ කවචය ලෙස වන අතර උදා. cmd.exeහෝ පවර්ෂෙල් නොවේ.
DopeGhoti

ලින්ටර්ස් පැමිණිලි කරයි, සමහර විට වඩාත් අලංකාර වන්නේtrue > filename
පැබ්ලෝ ඒ

137

ඔබට පරිශීලක විධානය භාවිතා කළ හැකිය: කප්පාදු කරන්න

truncate -s 0 test.txt

(ප්‍රමාණය නියම කිරීමට "-s 0")

http://www.commandlinefu.com/commands/view/12/empty-a-file


3
හොඳම පිළිතුර, ඔබ මූල නොවන විට (සුඩෝ සමඟ) ක්‍රියා කරයි - sudo echo > fileඑවැනි අවස්ථාවලදී දෝෂයක් ලබා දේ.
දිමිත්‍රි වර්කෝටුරොව්

12
MitDmitryVerkhoturov: sudo bash -c '> filename'යනු ඔබ sudo සමඟ Bash විසඳුම් භාවිතා කරන ආකාරයයි.
ස්ටුවර්ට් පී. බෙන්ට්ලි

1
brew install truncateos x මත හෝම්බ rew ස්ථාපනය කර ඇත.
xaxxon

Echo ට වඩා වේගයෙන් ක්‍රියා කරයි
Miao1007

35

ඔබට මෙය කළ හැකිය:

echo -n "" > file.log

>(ශුන්‍ය) ආදානය echo -nගොනුවට ලිවීමට භාවිතා කිරීම .

භාවිතා >>කරන ඇතුලත් (ඵලදායී නමුත් කිසිවක් සිදු ගොනුව කිරීමට ශූන්ය ආදාන touchඑය ing).


1
මෙය එහි ඉඩක් තබනු ඇත.
dmckee --- හිටපු උපපරිපාලක පූස් පැටවා

-Bash::: විධානය නැහැ මම මේ අරගෙන යනවා
ඇන්ඩෲ

4
echo ""> තවමත් ඔබට එක් අක්ෂරයක් සහිත ගොනුවක් ලබා දෙනු ඇත (නව රේඛාවක්.) ඔබට echo භාවිතා කිරීමට අවශ්‍ය නම්, ශුන්‍ය ලෙස ප්‍රතිරාවය කිරීමට "echo -n> file.log" භාවිතා කරන්න.
ඩේව් ෆෝගැක්

true(හෝ එහි බිල්ඩින් අන්වර්ථය :) වැනි කැපවූ ශුන්‍ය ප්‍රතිදාන විධානයක් භාවිතා කිරීම වඩා හොඳය , අවසානයේදී ඔබට කිසිසේත්ම විධානයක් අවශ්‍ය නොවේ (පිළිගත් පිළිතුර බලන්න).
ස්ටුවර්ට් පී. බෙන්ට්ලි

ඔබට යම් ගැටළු ඇති විය හැක sudo.
flapjack

31
: > file.log

> filenameBash හි ඇති ආකාරයටම , නමුත් වැඩි ෂෙල් වෙඩි (ණය) වලින් ක්‍රියා කරයි. trueබිල්ඩින් වෙතින් ප්‍රතිදානය (ප්‍රතිදානය නොමැති) වෙත හරවා යවයි filename.


මම ආවේ මේ පිළිතුර දෙන්න, නමුත් අහෝ එය දැනටමත් මෙහි ඇත ... ඉහළට යන්න.
ආරොන් හෝල්

5
කරන්න :> filename. එය සිනහවක් මෙන් පෙනෙන්නේ නැද්ද? :>
minmaxavg

11

ZSH

>! filename

ZSH විසින් io යළි-යොමුවීම් ක්‍රියාකරු භාවිතා කරමින් ලිපිගොනු පිරික්සීමෙන් පරිශීලකයින් ආරක්ෂා කරනු ඇත >. ඔබ භාවිතා කරන්නේ නම් >!පවතින ගොනුවක් කප්පාදු කිරීමට ඔබට බල කළ හැකිය.

ඔබට ZSH විසින් බාෂ්ගේ යළි-යොමුවීමේ හැසිරීම භාවිතා කිරීමට අවශ්‍ය නම්, ගොනු ක්ලෝබරිං වලින් ආරක්ෂාවක් නොතිබුනේ නම්, clobberඔබේ කවචය සඳහා විකල්පය සැකසිය යුතුය .

වැඩි විස්තර: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9

විධාන රේඛාවේ vim editor එකකින් ඔබට කිරීමට අවශ්‍ය නම්, ඔබට මෙය උත්සාහ කළ හැකිය:

vim file.txt 

ඔබන්න Esc.

:1,$d

ඔබන්න Enter.

සියලුම රේඛා මකා දමා ඇති බව ඔබට පෙනෙනු ඇත.


මෙය මා වෙනුවෙන් වැඩ කළ එකම දෙයයි maillog, එය පවා sudo > /var/log/maillogඉවත් නොකරනු ඇත (අවසරය ප්‍රතික්ෂේප කරන ලදි)
බොබෝබෝබෝ

2
obbobobobo එය sudo > /var/log/maillogමාධ්‍යයක් ලෙස ක්‍රියා නොකරයි - sudo ධාවනය කර එහි ප්‍රතිදානය ගොනුවට දමන්න. නිසැකවම එය වත්මන් පරිශීලක අවසරයන් සමඟ ප්‍රතිදානය තබයි. පහසු දෙය නම් sudo suමූල කවචය ආරම්භ කර පසුව කරන්න > /var/log/maillog.
kan

5

පහත විධානය ද ක්‍රියාත්මක විය යුතුය:

cat /dev/null > file.log

4
$ rm file.log; touch file.log

හෝ

$ cat > file.log

පසුව control-d.

හෝ ... හෝ ... හෝ ...

අහ්. මෙන්න තනි විධාන අනුවාදයකි:

$ dd if=/dev/null of=file.log

2
Thechickenmoo ගේ යෝජනාව ඔබ පෙන්වන විකල්පයට echo "" > file.logවඩා හොඳයි cat, මෙම තත්වය තුළ, catවඩාත් සුදුසු වෙනත් අය සිටිනවා . බර ඉසිලීම සිදු කිරීම සඳහා දෙදෙනාම එකම ෂෙල් යළි හරවා යැවීම භාවිතා කරයි.
quack quixote

2
ඔබට cat විධානය ක්‍රියාත්මක කිරීමට අවශ්‍ය නැත. "> File.log" එය කරයි.
camh

ගොනුව ඉවත් කිරීමෙන් නිර්මාණ දිනය නැවත සැකසෙනු ඇත.
මැටියෝ

ගොනුව ඉවත් කිරීමෙන් එම ගොනුව නරඹන වැඩසටහන් වලට එහි දර්ශකය නැති වී යයි (එනම්, එය ගොනු පද්ධතියේ නව ලිපිනයක් ඇත). පොදුවේ ගත් කල, ඔව් rmඑකම නමක් සහිත හිස් ගොනුවක් නිෂ්පාදනය කිරීමේ කාර්යය ඉටු කරනු ඇත. නමුත් සෑම භාවිත අවස්ථාවකටම එය නිවැරදි නොවේ.
රොබට්

2

ගොනුවට ප්‍රවේශ වීම සඳහා ඔබට සුපර් යූසර් වරප්‍රසාදය ලබා ගැනීමට අවශ්‍ය නම් පිළිගත් පිළිතුර ක්‍රියා නොකරනු ඇත. මෙය භාවිතා කිරීම සාර්ථක වේ:

truncate -s0 file

හෝ පැහැදිලිවම sudo සමඟ:

sudo truncate -s0 file

වැඩි විස්තර මෙතැනින් http://www.commandlinefu.com/commands/view/12/empty-a-file


1

විකල්ප කිහිපයක්:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log

1

ඔබට ගොනු නාමවල ඉඩ තිබේ නම්, භාවිතා කරන්න:

for file in /path/to/file/*; do > "$file"; done

(මට කීර්තියක් 50 ක් නොමැති නිසා එය පෙර පිළිතුරට අදහස් දැක්වීමට ඇතුළත් කිරීමට මට නොහැකි විය. සමහර විට සීමාවන් පරස්පර විරෝධී වේ.)


0

වරකට එක පේළියක්?

ඕනෑම දෙයක් කළ හැකි සුන්දර පෙළ සංස්කාරක vi (m) උත්සාහ කරන්න. මෙම අවස්ථාවේදී, රේඛාවකට සැරිසැරීම, d (මකා දැමීම සඳහා) ඔබන්න, සහ d නැවත (පේළිය සඳහා) ඔබන්න.


5
ලේඛනයේ ඉහළින් ඇති කර්සරය සමඟින් ඔබට සම්පූර්ණ ගොනුව මුළුමනින්ම ඉවත් කිරීමට අවශ්‍ය නම්, d G ටයිප් කිරීම (එනම් d, එවිට shift-G) මුළු ගොනුව මකා දමනු ඇත (මකා දැමීමට d, අවසානය සඳහා G ගොනුව). මම ඔබේ ක්‍රමයට වැඩි කැමැත්තක් දැක්වුවද (එය මට ගොනුව කුණු කූඩයට දැමීමට අවශ්‍යද නැද්ද යන්න ගැන සිතා බැලීමට වැඩි කාලයක් ලබා දෙයි).
බාබු

Ab බාබු ඉහළට ggගමන් කරයි, එවිට සම්පූර්ණ අනුක්‍රමය විය හැකිය ggdG.
බොබ්

0

මගේ අවසරය ඇතිව වැඩ කළ එකම දෙය මෙයයි:

touch temp.txt
sudo mv temp.txt original-file.txt

0

එසේම, ඔබට ගොනු කිහිපයක් තිබේ නම් ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය:

for file in /path/to/file/*; do > $file; done

එකම නාමාවලියෙහි ඇති ලොග් ගොනු සඳහා මෙය ප්‍රයෝජනවත් වේ.

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.