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


280

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

मुझे पता है कि सामग्री को स्क्रीन पर कैसे प्रिंट किया जाए:

cat file.log

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

nano file.log

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

जवाबों:


465

बैश में, बस

> filename

करूँगा।

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

ps

यदि आपको sudoकॉल की आवश्यकता है , तो कृपया यहां दिए गए उत्तर केtruncate रूप में उपयोग करने पर विचार करें


57
यह शायद कंप्यूटिंग के इतिहास में सबसे बड़ा आदेश है
कलंक

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

124

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

truncate -s 0 test.txt

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

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


3
जब आप नॉन-रूट (सुडो के साथ) काम करते हैं, तो सबसे अच्छा जवाब sudo echo > file
दिमित्री वेरखोटुरोव

12
@DmitryVerkhoturov: sudo bash -c '> filename'कैसे आप sudo के साथ बैश समाधान का उपयोग करते हैं।
स्टुअर्ट पी। बेंटले

1
brew install truncateहोम एक्स के साथ ओएस एक्स पर स्थापित किया गया।
xaxxon

प्रतिध्वनि से भी तेज काम करता है
Miao1007

34

आप ऐसा कर सकते हैं:

echo -n "" > file.log

फ़ाइल >से लिखने (नल) इनपुट लिखने के लिए उपयोग करना echo -n

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


यह वहाँ एक जगह छोड़ देगा।
dmckee

मुझे यह मिल रहा है: -बैश:: कमांड नहीं मिला
एंड्रयूज

3
इको ""> फिर भी आपको एक वर्ण (एक नई पंक्ति) के साथ एक फ़ाइल देगा। यदि आप इको का उपयोग करना चाहते हैं, तो इको-एनओएल "फाइल.लॉग" का उपयोग ईको नल को करें।
डेव फोरगैक

बेहतर होगा कि आप एक समर्पित अशक्त-आउटपुट कमांड true(या इसके बिलिन उर्फ :) का उपयोग करें, हालांकि अंततः आपको किसी कमांड की आवश्यकता नहीं है (स्वीकृत उत्तर देखें)।
स्टुअर्ट पी। बेंटले

आपको कुछ समस्याएं हो सकती हैं sudo
फ्लैपजैक

27
: > file.log

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


मैं यह जवाब देने के लिए आया था, लेकिन अफसोस कि यह पहले से ही यहाँ है ... एक उत्थान ले लो।
एरोन हॉल

5
बस करो :> filename। क्या यह एक स्माइली की तरह नहीं दिखता है? :>
minmaxavg

10

ZSH

>! filename

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

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

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


8

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

vim file.txt 

प्रेस करें Esc

:1,$d

प्रेस करें Enter

आपको सभी लाइनें हटा दी जाएंगी।


यह केवल एक चीज है जो मेरे लिए काम करती है maillog, यहां तक sudo > /var/log/maillogकि इसे स्पष्ट नहीं करेगी (अनुमति से इनकार किया गया है)
बॉबोबोबो

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

4
$ rm file.log; touch file.log

या

$ cat > file.log

इसके बाद control-d

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

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

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

2
ऑन्चिममू का सुझाव आपके द्वारा दिखाए echo "" > file.logगए catविकल्प से बेहतर है , इस स्थिति में, ऐसे अन्य लोग हैं catजो अधिक उपयुक्त हैं। दोनों भारी उठाने के लिए एक ही शेल पुनर्निर्देशन का उपयोग करते हैं।
क्वैककोट

2
आप बिल्ली कमान चलाने की जरूरत नहीं है। बस "> file.log" करेगा।
Camh

फ़ाइल को हटाने से निर्माण तिथि रीसेट हो जाएगी।
मत्तो

फ़ाइल को हटाने से उस फ़ाइल को अपने पॉइंटर को खो देने के लिए प्रोग्राम देखने का कारण होगा (यानी, इसका फाइल सिस्टम में एक नया पता होगा)। सामान्यतया, हाँ rmएक ही नाम के साथ एक खाली फ़ाइल बनाने के कार्य को पूरा करेगा। लेकिन यह हर उपयोग के मामले के लिए सही नहीं होगा।
रॉबर्ट


2

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

truncate -s0 file

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

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 (डिलीट के लिए) दबाएँ, और फिर से (लाइन के लिए) दबाएँ।


5
यदि आप दस्तावेज़ के शीर्ष पर कर्सर के साथ, संपूर्ण फ़ाइल को vim से निकालना चाहते हैं, तो d G टाइप करें (जो d है, तो Shift-G) संपूर्ण फ़ाइल को हटा देगा (d को हटाने के लिए, G के अंत के लिए G) फ़ाइल)। मैं आपकी विधि को पसंद करता हूं, हालांकि (यह मुझे सोचने के लिए अधिक समय देता है कि मैं वास्तव में फ़ाइल को रद्दी करना चाहता हूं या नहीं)।
बाबू

@ बाबू ggशीर्ष पर चला जाता है इसलिए पूरा क्रम हो सकता है ggdG
बॉब

0

मेरी अनुमति के साथ केवल यही एक काम है:

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

0

इसके अलावा, यदि आपके पास कई फाइलें हैं, तो आप निम्नलिखित का उपयोग कर सकते हैं:

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

यह उसी डायरेक्टरी में लॉग फाइल के लिए मददगार है।


0

> a.txt

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.