清空文件内容的最有效方法

清空文件内容的最有效方法

我知道三种方法可以从文件中删除所有条目。

他们是

  • >filename
  • touch filename1
  • filename < /dev/null

在这三个中,我滥用得>filename最多,因为这需要最少的击键次数。

但是,我想知道对于大日志文件和小文件来说,这三种方法中哪一种最有效(如果有更有效的方法)。

还有,这三个代码是如何操作和删除内容的呢?


1编辑: 如中所讨论的这个答案,这实际上才不是清除文件!

答案1

实际上,第二种形式touch filename不会从文件中删除任何内容 - 如果文件不存在,它只会创建一个空文件,或者更新现有文件的上次修改日期。

第三个filename < /dev/null尝试运行 filename/dev/null作为输入。

cp /dev/null filename作品。

至于效率,最有效的是truncate -s 0 filename(参见这里)。

否则,cp /dev/null filename或者> filename两者都很好。它们都使用打开时截断设置打开然后关闭文件。 cp也会打开/dev/null,因此速度会稍微慢一些。

另一方面,truncate可能会比> filename从脚本运行时慢,因为运行 truncate 命令需要系统打开可执行文件,加载它,然后运行它。

答案2

其他选项可能是:

echo -n > filename

从手册页echo

-n Do not print the trailing newline character.

答案3

有一个内置命令“:”,可能在 sh、csh、bash 等中可用,可以轻松地与重定向输出运算符>截断文件一起使用:

#!/usr/bin/env bash
:> filename

我喜欢的是,它不需要任何外部命令,如“echo”等。

截断文件而不是删除/重新创建文件的一大优点是,运行与该文件配合使用的应用程序(例如,有人制作了一个tail -f filename或一个监视软件,...)不必重新打开它。他们可以继续使用文件描述符并获取所有新数据。

相关内容