在 Linux 中创建文件? (触摸与回声)

在 Linux 中创建文件? (触摸与回声)

总的来说,我对 Linux 还很陌生,所以我不太熟悉某些命令的注意事项。

我想创建一个文件并注意到:

touch file.txt `

创建一个文件,但也是如此:

echo >> file.txt

并且

> file.txt

使用“">”和“touch”创建的文件都是0字节,但使用“echo”创建的文件是1字节。

为什么文件大小不同?创建文件的最佳方法是什么?什么时候应该使用“echo”而不是“touch”或“">”创建文件?

答案1

有关创建文件的一般问题,请参阅:为什么没有任何 shell 命令来创建文件?


与 和> file一起echo >> file如果该文件尚不存在,则创建该文件。

使用 时> file,如果文件已存在,则该文件将被截断。未指定命令,因此不会向文件写入任何内容,文件将为空。

echo,不带任何参数,打印一个空行。因此输出包含行结束字符,通常是换行符 (LF, \n):

% echo | od -c
0000000  \n
0000001

因此,使用echo >> file,您将向文件写入一个字节。如果文件已经存在,那么它将添加一个字节,因为您使用了>>(追加)而不是>(覆盖)。

touch如果文件尚不存在,则创建该文件,否则更新该文件的时间戳。touch不会更改文件的内容,因此如果文件已经存在并且其中包含一些内容,则在touch.

你想用哪个取决于你想要什么效果。

答案2

穆鲁的回答很好地解释了行为上的差异。

根据您的需求,可能有多种方法可以实现完全相同的目标。在这种情况下,这可能是“品味”或可读性的问题。我更喜欢touch。可以说,它更安全 - 如果文件已经存在,并且您不想丢失其内容。也是令人难忘的。

如果您在脚本中编写命令,一般规则是人们阅读代码的次数多于您编写代码的次数。也就是说,你正在与人类交流 - 包括你未来的自己 - 而不仅仅是计算机:-)。您可能会发现以下代码行有点不明显。

> file

如果您需要与 完全相同的行为> file,还有一个名为 的命令 truncatetruncate由 GNU coreutils 提供。

相关内容