題 如何從命令行清除文件的內容?


我有一個日誌文件,其中包含一些我不再需要的東西。我想清除內容。

我知道如何將內容打印到屏幕上:

cat file.log

我知道如何逐行編輯文件:

nano file.log

但我不想一次刪除每一行。有沒有辦法在一個命令中執行它而不破壞文件來執行此操作?


243
2018-01-01 01:50


起源




答案:


在bash,只是

> filename

會做。

這將為您留下一個空文件 文件名

附:

如果你需要 sudo 打電話,請考慮使用 truncate 如 這裡回答


411
2018-01-01 10:20



這可能是計算歷史上最基本的命令 - blarg
相反,@ Arekkusandaa.Irujasukin;它可以在任何版本的Windows中正常工作,只要如上所述,您正在使用它 bash 作為你的殼而不是e。 G。 cmd.exe 或PowerShell,其中任何一個都不足以被期望處理這些事情。 - 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



最好的答案,當你非root(sudo)時工作 - sudo echo > file 只是在這種情況下給出錯誤。 - Dmitry Verkhoturov
@DmitryVerkhoturov: sudo bash -c '> filename' 是你如何使用sudo的Bash解決方案。 - Stuart P. Bentley
brew install truncate 在os x上安裝了自製軟件。 - xaxxon


你可以這樣做:

echo -n "" > file.log

運用 > 寫入(null)輸入 echo -n 到文件。

運用 >> 將 附加 文件的空輸入(實際上除了 touch它)。


32
2018-01-01 01:55



這將留下一個空間。 - dmckee
我得到這個:-bash ::命令未找到 - Andrew
echo“”>仍然會給你一個帶有一個字符的文件(換行符。)如果你想使用echo,請使用“echo -n> file.log”來回顯null。 - Dave Forgac
最好使用像。這樣的專用空輸出命令 true (或其內置別名 :),儘管最終你根本不需要命令(參見接受的答案)。 - Stuart P. Bentley
和Mac一起工作,謝謝 - AMIC MING


: > file.log

與...一樣 > filename 在Bash中,但在更多的shell中工作 (信用)。重定向輸出 true 內置(沒有輸出)到 filename


22
2017-07-25 22:51



我來做這個答案,但唉它已經在這裡......採取一個upvote。 - Aaron Hall
做就是了 :> filename。它看起來不像笑臉嗎? :> - minmaxavg


ZSH

>! filename

ZSH將使用io重定向運算符保護用戶免受破壞文件的侵害 >。如果你使用 >! 您可以強制截斷現有文件。

如果你想讓ZSH使用Bash的重定向行為,如果沒有文件clobbering的保護,那麼你需要設置 clobber 你的shell選項。

更多信息: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9
2017-12-06 20:48





如果你想在命令行中的vim編輯器內做,你可以試試這個:

vim file.txt 

退出

:1,$d

輸入

您會發現所有行都已刪除。


7
2017-09-12 18:21



這是唯一對我有用的東西 maillog,甚至 sudo > /var/log/maillog 不會清除它(許可被拒絕) - bobobobo
@bobobobo它不起作用 sudo > /var/log/maillog 意思是 - 運行sudo,並將其輸出放入文件中。顯然,它將輸出與當前用戶權限放在一起。更簡單的事情 sudo su 啟動root shell然後再做 > /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