सवाल कमांड लाइन से फ़ाइल की सामग्री को कैसे साफ़ करें?


मेरे पास एक लॉग फ़ाइल है जिसमें इसमें सामान का एक गुच्छा है जिसे मुझे अब और आवश्यकता नहीं है। मैं सामग्री को साफ़ करना चाहता हूं।

मुझे पता है कि स्क्रीन पर सामग्री कैसे मुद्रित करें:

cat file.log

मुझे पता है कि फ़ाइल को कैसे संपादित करें, लाइन-दर-रेखा:

nano file.log

लेकिन मैं एक समय में प्रत्येक पंक्ति को हटाना नहीं चाहता हूं। फ़ाइल को नष्ट करने के बिना इसे एक कमांड में करने का कोई तरीका है?


243
2018-01-01 01:50


मूल




जवाब:


बाश में, बस

> filename

करूँगा।

यह आपको एक खाली फाइल के साथ छोड़ देगा फ़ाइल का नाम

अनुलेख

अगर तुम्हे जरुरत हो sudo कॉल करें, कृपया उपयोग करने पर विचार करें truncate जैसा यहां जवाब दिया


411
2018-01-01 10:20



यह कंप्यूटिंग के इतिहास में शायद सबसे कठिन आदेश है - blarg
इसके विपरीत, @ अरेक्कुसंडा। इरुजासुक्विन; यह विंडोज के किसी भी संस्करण में ठीक काम करता है, जैसा कि बताया गया है, आप इसका उपयोग कर रहे हैं bash आपके खोल के रूप में और ई नहीं। जी। cmd.exe या पावरशेल, जिनमें से कोई भी ऐसी चीजों को संभालने की अपेक्षा रखने के लिए पर्याप्त नहीं है। - DopeGhoti


आप उपयोगकर्ता कमांड का उपयोग कर सकते हैं: truncate

truncate -s 0 test.txt

(आकार निर्दिष्ट करने के लिए "-s 0")

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


92
2017-08-20 14:21



आस-पास का सबसे अच्छा जवाब, जब आप गैर-रूट (सूडो के साथ) होते हैं तो काम करता है - sudo echo > file बस ऐसे मामलों में एक त्रुटि देता है। - Dmitry Verkhoturov
@DmitryVerkhoturov: sudo bash -c '> filename' आप सूडो के साथ बैश समाधान का उपयोग कैसे करते हैं। - Stuart P. Bentley
brew install truncate होमब्री स्थापित के साथ ओएस एक्स पर। - xaxxon


आप यह कर सकते हैं:

echo -n "" > file.log

का उपयोग करते हुए > से (शून्य) इनपुट लिखने के लिए echo -n फ़ाइल में।

का उपयोग करते हुए >> होगा जोड़ना फ़ाइल में शून्य इनपुट (प्रभावी रूप से कुछ भी नहीं कर रहा है touchइसे आईएनजी)।


32
2018-01-01 01:55



यह वहां एक जगह छोड़ देगा। - dmckee
मुझे यह मिल रहा है: -बैश:: आदेश नहीं मिला - Andrew
echo ""> आपको अभी भी एक वर्ण (एक नई लाइन) के साथ एक फाइल देगा। यदि आप गूंज का उपयोग करना चाहते हैं, तो गूंजने के लिए "echo -n> file.log" का उपयोग करें। - Dave Forgac
एक समर्पित शून्य-आउटपुट कमांड का उपयोग करना बेहतर होगा true(या इसके अंतर्निहित उपनाम :), हालांकि आखिरकार आपको कमांड की आवश्यकता नहीं है (स्वीकृत उत्तर देखें)। - Stuart P. Bentley
मैक के साथ ठीक काम कर रहा है, धन्यवाद - AMIC MING


: > file.log

के समान > filename बैश में, लेकिन अधिक गोले में काम करता है (क्रेडिट)। से आउटपुट को रीडायरेक्ट करता है true बिल्टिन (जिसमें कोई आउटपुट नहीं है) filename


22
2017-07-25 22:51



मैं यह जवाब देने आया था, लेकिन हां यह पहले से ही यहाँ है ... एक अपवित्र ले लो। - Aaron Hall
बस करो :> filename। क्या यह एक स्माइली की तरह दिखता है? :> - minmaxavg


ZSH

>! filename

जेडएसएच उपयोगकर्ताओं को आईओ रीडायरेक्ट ऑपरेटर का उपयोग करके फाइलों को क्लॉबर करने से बचाएगा >। यदि तुम प्रयोग करते हो >! आप मौजूदा फाइल के छंटनी को मजबूर कर सकते हैं।

यदि आप जेएसएचएच को बैश के पुनर्निर्देशन व्यवहार का उपयोग करना चाहते हैं, तो फाइल क्लॉबरिंग से कोई सुरक्षा नहीं है, तो आपको सेट करने की आवश्यकता है clobber आपके खोल के लिए विकल्प।

और जानकारी: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9
2017-12-06 20:48





यदि आप कमांड लाइन में एक विम संपादक के अंदर से करना चाहते हैं, तो आप इसे आजमा सकते हैं:

vim file.txt 

दबाएँ Esc

:1,$d

दबाएँ दर्ज

आपको सभी पंक्तियां हटा दी जाएंगी।


7
2017-09-12 18:21



यह एकमात्र चीज है जो मेरे लिए काम करती है maillog, यहाँ तक की sudo > /var/log/maillog इसे साफ़ नहीं करेगा (अनुमति अस्वीकार कर दी गई है) - bobobobo
@bobobobo यह काम नहीं करता है sudo > /var/log/maillog मतलब - सुडो चलाएं, और फ़ाइल में अपना आउटपुट डालें। जाहिर है यह वर्तमान उपयोगकर्ता अनुमतियों के साथ आउटपुट डालता है। आसान काम करते हैं sudo su रूट खोल शुरू करने के लिए और फिर करते हैं > /var/log/maillog। - kan


$ rm file.log; touch file.log

या

$ cat > file.log

के बाद control-d

या ... या ... या ...

आह। यहां एक एकल कमांड संस्करण है:

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

4
2018-01-01 01:59



Thechickenmoo का सुझाव echo "" > file.log से बेहतर है cat विकल्प जो आप दिखाते हैं, इस स्थिति में, जहां अन्य लोग हैं cat अधिक उपयुक्त है। भारी उठाने के लिए दोनों एक ही खोल पुनर्निर्देशन का उपयोग करते हैं। - quack quixote
आपको बिल्ली कमांड चलाने की ज़रूरत नहीं है। बस "> file.log" यह करेगा। - camh
फ़ाइल को हटाने से निर्माण की तारीख रीसेट हो जाएगी। - Matteo
फ़ाइल को हटाने से प्रोग्राम उस फ़ाइल को अपने पॉइंटर को खोने के लिए देख सकेंगे (यानी, फाइल सिस्टम में इसका नया पता होगा)। आम तौर पर बोलते हुए, हाँ rm एक ही नाम के साथ एक खाली फ़ाइल का उत्पादन करने का काम पूरा करेगा। लेकिन यह हर उपयोग के मामले के लिए सही नहीं होगा। - robert


नीचे आदेश भी काम करना चाहिए:

cat /dev/null > file.log

4
2018-05-10 12:45





यदि आपको फ़ाइल तक पहुंचने के लिए सुपरसुर विशेषाधिकार की आवश्यकता है तो स्वीकार्य उत्तर काम नहीं करेगा। इसका उपयोग करना काम करता है:

truncate -s0 file

या स्पष्ट रूप से सुडो के साथ:

sudo truncate -s0 file

यहां अधिक जानकारी http://www.commandlinefu.com/commands/view/12/empty-a-file


2
2018-01-30 19:11