سؤال كيفية مسح محتويات ملف من سطر الأوامر؟


لدي ملف سجل يحتوي على مجموعة من الأشياء التي لست بحاجة بعد الآن. أريد مسح المحتويات.

أعرف كيفية طباعة المحتويات على الشاشة:

cat file.log

أعرف كيفية تحرير الملف ، بخط تلو الآخر:

nano file.log

لكنني لا أرغب في حذف كل سطر في كل مرة. هل هناك طريقة للقيام بذلك في أمر واحد دون تدمير الملف للقيام بذلك؟


243
2018-01-01 01:50


الأصل




الأجوبة:


في باش ، فقط

> filename

سوف تفعل.

هذا سوف يترك لك مع ملف فارغ اسم الملف.

ملاحظة

اذا احتجت sudo الاتصال ، يرجى النظر في استخدامها truncate مثل أجبت هنا.


411
2018-01-01 10:20



من المحتمل أن يكون هذا الأمر الأكثر خضوعًا في تاريخ الحوسبة - blarg
على العكس من ذلك ، @ Arekkusandaa.Irujasukin. يعمل بشكل جيد في أي إصدار من Windows ، طالما أنك تستخدم bash كصدفك وليس ه. ز. cmd.exe أو PowerShell ، لا يمثل أي منهما POSIXy ما يكفي للتعامل مع مثل هذه الأمور. - DopeGhoti


يمكنك استخدام الأمر user: اقتطاع

truncate -s 0 test.txt

("-s 0" لتحديد الحجم)

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


92
2017-08-20 14:21



أفضل إجابة ، تعمل عندما تكون غير جذور (مع sudo) - sudo echo > file فقط يعطي خطأ في مثل هذه الحالات. - Dmitry Verkhoturov
DmitryVerkhoturov: sudo bash -c '> filename' هي كيفية استخدام حلول Bash مع sudo. - Stuart P. Bentley
brew install truncate على OS X مع تثبيت homebrew. - xaxxon


يمكنك فعل هذا:

echo -n "" > file.log

عن طريق > لكتابة الإدخال (null) من echo -n إلى الملف.

عن طريق >> سيكون ألحق مدخلات فارغة إلى الملف (لا تفعل سوى شيء فعال touching ذلك).


32
2018-01-01 01:55



هذا سيترك مساحة هناك. - dmckee
أتلقى هذا: - bash:: لم يتم العثور على الأمر - Andrew
echo ""> سيعطيك ملفًا بحرف واحد (سطر جديد.) إذا كنت تريد استخدام echo ، استخدم "echo -n> file.log" لصدى خالية. - Dave Forgac
سيكون من الأفضل استخدام أمر null-output مخصص مثل true (أو الاسم المستعار الخاص به) :) ، على الرغم من أنك في النهاية لا تحتاج إلى أمر على الإطلاق (انظر الإجابة المقبولة). - Stuart P. Bentley
العمل بشكل جيد مع ماك ، وذلك بفضل - AMIC MING


: > file.log

مثل > filename في باش ، لكنه يعمل في المزيد من القذائف (ائتمان). يعيد توجيه الإخراج من true مدمج (الذي لا يوجد لديه الإخراج) ل filename.


22
2017-07-25 22:51



جئت لجعل هذه الإجابة ، ولكن للأسف بالفعل هنا ... تأخذ upvote. - Aaron Hall
فقط افعل :> filename. ألا يبدو مثل مبتسم؟ :> - minmaxavg


ZSH

>! filename

سوف يقوم ZSH بحماية المستخدمين من ملفات clobbering باستخدام مشغل إعادة التوجيه io >. إذا كنت تستخدم >! يمكنك فرض اقتطاع ملف موجود.

إذا كنت تريد أن يستخدم ZSH سلوك إعادة توجيه Bash ، فلم تكن هناك حماية من تهذيب الملف ، فأنت بحاجة إلى ضبط clobber الخيار لقذيفة الخاص بك.

مزيد من المعلومات: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9
2017-12-06 20:48





إذا كنت تريد القيام بذلك من داخل محرر vim في سطر الأوامر ، يمكنك تجربة هذا:

vim file.txt 

صحافة زر Esc فى الكيبورد.

:1,$d

صحافة أدخل.

سوف تجد كل الخطوط المحذوفة.


7
2017-09-12 18:21



هذا هو الشيء الوحيد الذي يعمل من أجل maillog، حتى في sudo > /var/log/maillog لن يتم مسحها (تم رفض الإذن) - bobobobo
bobobobo لا يعمل sudo > /var/log/maillog يعني - تشغيل sudo ، ووضع انتاجها في الملف. من الواضح أنه يضع الإخراج بأذونات المستخدم الحالية. أسهل شيء فعله 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 هو أكثر ملاءمة. كلاهما يستخدم نفس إعادة توجيه shell للقيام بالرفع الثقيل. - quack quixote
لا تحتاج إلى تشغيل الأمر cat. فقط "> file.log" سوف تفعل ذلك. - camh
ستؤدي إزالة الملف إلى إعادة تعيين تاريخ الإنشاء. - Matteo
ستؤدي إزالة الملف إلى برامج تشاهد هذا الملف ليخسر المؤشر إليه (على سبيل المثال ، سيكون له عنوان جديد في نظام الملفات). بشكل عام ، نعم rm سينجز مهمة إنتاج ملف فارغ بنفس الاسم. ولكنها لن تكون مناسبة لكل حالة استخدام. - robert


يجب أن يعمل الأمر أدناه أيضًا:

cat /dev/null > file.log

4
2018-05-10 12:45