لدي ملف سجل به مجموعة من الأشياء التي لم تعد بحاجة إليها. أريد مسح المحتويات.
أعرف كيفية طباعة المحتويات على الشاشة:
cat file.log
أنا أعرف كيفية تحرير الملف ، سطراً:
nano file.log
لكنني لا أريد حذف كل سطر في كل مرة. هل هناك طريقة للقيام بذلك في أمر واحد دون تدمير الملف للقيام بذلك؟
في باش ، فقط
> filename
سوف تفعل.
هذا سيترك لك مع ملف فارغ اسم الملف .
ملاحظة.
إذا كنت بحاجة إلى Sudo
call ، فيرجى مراعاة استخدام truncate
كـ تمت الإجابة عليه هنا .
يمكنك استخدام أمر المستخدم: اقتطاع
truncate -s 0 test.txt
("-s 0" لتحديد الحجم)
يمكنك القيام بذلك:
echo -n "" > file.log
باستخدام >
لكتابة الإدخال (الخالي) من echo -n
إلى الملف.
باستخدام >>
من شأنه إلحاق الإدخال الخالي للملف (لا يفعل شيئًا فعليًا إلا touch
ing).
: > file.log
مثل > filename
في Bash ، ولكنه يعمل في المزيد من القذائف (الائتمان) . يعيد توجيه الإخراج من true
المدمج (الذي لا يوجد لديه إخراج) إلى filename
.
ZSH
>! filename
سوف ZSH حماية المستخدمين من clobbering الملفات باستخدام مشغل io إعادة توجيه >
. إذا كنت تستخدم >!
، فيمكنك فرض اقتطاع ملف موجود.
إذا كنت ترغب في أن يستخدم ZSH سلوك إعادة توجيه Bash ، فليس هناك حماية من clobbering الملف ، فأنت بحاجة إلى تعيين الخيار clobber
لـ Shell.
مزيد من المعلومات: http://zsh.sourceforge.net/Doc/Release/Redirection.html
إذا كنت ترغب في القيام بذلك من داخل محرر vim في سطر الأوامر ، يمكنك تجربة هذا:
vim file.txt
صحافة Esc.
:1,$d
صحافة Enter.
ستجد جميع الخطوط المحذوفة.
$ rm file.log; touch file.log
أو
$ cat > file.log
متبوعاً بـ control-d
.
أو ... أو ... أو ...
آه. فيما يلي إصدار أمر واحد:
$ dd if=/dev/null of=file.log
القيادة أدناه يجب أن تعمل أيضا:
cat /dev/null > file.log
إذا كنت بحاجة إلى Sudo لامتياز المستخدم الخارق للوصول إلى الملف ، فلن تعمل الإجابة المقبولة. استخدام هذا يعمل:
truncate -s0 file
أو بشكل صريح مع Sudo:
Sudo truncate -s0 file
مزيد من المعلومات هنا http://www.commandlinefu.com/commands/view/12/empty-a-file
إذا كان لديك مسافات في أسماء الملفات ، فاستخدم:
for file in /path/to/file/*; do > "$file"; done
(لم أتمكن من إدراجه في التعليقات على الإجابة السابقة لأنني لا أملك 50 سمعة. في بعض الأحيان تكون القيود منتجة.)
بعض البدائل:
ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
مثل> اسم الملف في Bash ، لكنه يعمل في المزيد من الأصداف (الائتمان). يعيد توجيه الإخراج من المضمنة الحقيقية (التي لا يوجد لديه الإخراج) إلى اسم الملف.
سطر واحد في وقت واحد؟
جرب vi (m) ، محرر النصوص الجميل الذي يمكنه فعل أي شيء. في هذه الحالة ، انتقل إلى سطر ، واضغط على d (للحذف) ، ثم d مرة أخرى (للخط).
أيضًا ، إذا كان لديك ملفات متعددة ، فيمكنك استخدام ما يلي:
for file in /path/to/file/*; do > $file; done
هذا مفيد لملفات السجل في نفس الدليل.
مع أذوناتي ، هذا هو الشيء الوحيد الذي نجح:
touch temp.txt
Sudo mv temp.txt original-file.txt