ファイルは空ですが、1バイトのサイズを表示します。

ファイルは空ですが、1バイトのサイズを表示します。

私のスクリプトはtmpファイルを使用してデータを書き込んで削除します。書き込みとsed削除にリダイレクトを使用します。

時にはファイルが存在し、空であることを確認したいが、コードは失敗します(ファイルは存在しますがデータはありません)。

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

ファイルサイズを確認すると、ファイルにデータがないのに1バイトで表示されます。

geditでファイルを開いて保存すると、サイズは0バイトで表示されます。

なぜこれが起こるのですか?

コンテンツを削除した後に余分なバイトが残っていないことを確認するには?


ファイルが「空」(1バイト)の場合は、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

1バイトサイズの画像を表示します。

ここに画像の説明を入力してください。

geditで開かれたファイルイメージ:

ここに画像の説明を入力してください。

答え1

echo私はあなたが改行を追加するファイルへの書き込みを使用しており、削除を使用するときにsed削除するときに改行と一致しないと推測します。

ここにはいくつかのオプションがあります。
1:末尾の改行なしで作成するには、printfまたは(サポートされている場合)を使用します。 2: sed を使用して末尾の改行文字を一致させて削除します。 3: 適切な時間にファイルを消去するスティーブの方法。echo -n

答え2

\n のみを含む 1 バイトのファイルです。

>/tmp/foo0にリセットするために使用されます。

$ 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
$

関連情報