文件为空,但显示一字节大小

文件为空,但显示一字节大小

我的脚本使用 tmp 文件在其中写入和删除数据。我使用重定向来写入和sed删除。

有时,我想检查文件是否存在且为空,但我的代码失败(文件存在且没有数据):

[[ -s /tmp/tmp_file ]] && echo "not empty" || echo "empty"
not empty

当我检查文件大小时,它显示 1 个字节,尽管该文件中没有数据。

如果我用 gedit 打开文件并保存文件,则它显示 0 字节大小。

为什么会发生这种情况?

如何确保删除内容后不留下多余的字节?


当文件为“空”(一个字节)时,添加ls -ld和的输出:od

ls -ld tmp_file
-rwxr-xr-x 1 root root 1 dic 18 15:43 tmp_file

od tmp_file
0000000 000012
0000001

显示一字节大小的图像:

在此输入图像描述

在 gedit 中打开的文件的图像:

在此输入图像描述

答案1

我将猜测您正在使用echo写入文件,该文件正在附加换行符,并且当您使用 删除时sed,删除时与换行符不匹配。

这里有几个选项:
1:使用printfor (echo -n如果支持)来写入而不带尾随换行符。
2:使用 sed 匹配尾随换行符以将其删除。
3:史蒂夫在适当的时候清空文件的方法。

答案2

1 字节文件,仅包含 \n。

用于>/tmp/foo将其归零。

$ ls -l /tmp/foo
-rw-rw-r--. 1 steve steve 1 Dec 18 12:50 /tmp/foo
$ od -c /tmp/foo
0000000  \n
0000001
$ >/tmp/foo
$ ls -l /tmp/foo
-rw-rw-r--. 1 steve steve 0 Dec 18 12:51 /tmp/foo
$

相关内容