我的脚本使用 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:使用printf
or (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
$