it-swarm.asia

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

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

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

cat file.log

أنا أعرف كيفية تحرير الملف ، سطراً:

nano file.log

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

264
Andrew

في باش ، فقط

> filename

سوف تفعل.

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

ملاحظة.

إذا كنت بحاجة إلى Sudo call ، فيرجى مراعاة استخدام truncate كـ تمت الإجابة عليه هنا .

440
geek

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

truncate -s 0 test.txt

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

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

109
nono

يمكنك القيام بذلك:

echo -n "" > file.log

باستخدام > لكتابة الإدخال (الخالي) من echo -n إلى الملف.

باستخدام >> من شأنه إلحاق الإدخال الخالي للملف (لا يفعل شيئًا فعليًا إلا touching).

34
Thechickenmoo
: > file.log

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

23
Stuart P. Bentley

ZSH

>! filename

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

إذا كنت ترغب في أن يستخدم ZSH سلوك إعادة توجيه Bash ، فليس هناك حماية من clobbering الملف ، فأنت بحاجة إلى تعيين الخيار clobber لـ Shell.

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

9
Brian Wigginton

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

vim file.txt 

صحافة Esc.

:1,$d

صحافة Enter.

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

8
soum
$ rm file.log; touch file.log

أو

$ cat > file.log

متبوعاً بـ control-d.

أو ... أو ... أو ...

آه. فيما يلي إصدار أمر واحد:

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

القيادة أدناه يجب أن تعمل أيضا:

cat /dev/null > file.log
4
paarth batra

إذا كنت بحاجة إلى Sudo لامتياز المستخدم الخارق للوصول إلى الملف ، فلن تعمل الإجابة المقبولة. استخدام هذا يعمل:

truncate -s0 file

أو بشكل صريح مع Sudo:

Sudo truncate -s0 file

مزيد من المعلومات هنا http://www.commandlinefu.com/commands/view/12/empty-a-file

2
timeSmith

إذا كان لديك مسافات في أسماء الملفات ، فاستخدم:

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

(لم أتمكن من إدراجه في التعليقات على الإجابة السابقة لأنني لا أملك 50 سمعة. في بعض الأحيان تكون القيود منتجة.)

1
d491049

بعض البدائل:

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

> a.txt

مثل> اسم الملف في Bash ، لكنه يعمل في المزيد من الأصداف (الائتمان). يعيد توجيه الإخراج من المضمنة الحقيقية (التي لا يوجد لديه الإخراج) إلى اسم الملف.

0
user1021769

سطر واحد في وقت واحد؟

جرب vi (m) ، محرر النصوص الجميل الذي يمكنه فعل أي شيء. في هذه الحالة ، انتقل إلى سطر ، واضغط على d (للحذف) ، ثم d مرة أخرى (للخط).

0
Phoshi

أيضًا ، إذا كان لديك ملفات متعددة ، فيمكنك استخدام ما يلي:

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

هذا مفيد لملفات السجل في نفس الدليل.

0
DomainsFeatured

مع أذوناتي ، هذا هو الشيء الوحيد الذي نجح:

touch temp.txt
Sudo mv temp.txt original-file.txt
0
Morgan