シェルスクリプトでファイルが空かどうか確認する

2021-07-02

ファイルが空(0byte)かどうか確認する

シェルスクリプトでファイルが空ファイル(0byete)かどうか確認する場合はifコマンドの「-s」のオプションを利用します。

$ sh test.sh
#!.bin/bash

FILE=test.txt

if [ ! -s $FILE ]; then
#空の場合の処理
  echo "$FILE は0byte"
else
# 0byte 以上の処理
  ls -l $FILE
fi

但し、改行は入っている場合は0byte 以上で扱われます

$ cat -e test.txt
$
$
$
$
$
$

# 改行あるので、空ファイルとして扱われない
$ sh test.sh
-rw-rw-r-- 1 ex-adm ex-adm 6  9月  3 11:10 test.txt

空の改行が含まれる可能性がある場合は、ifコマンドで空ファイルか確認する前に、sedコマンドで空の行を削除してから実行します。

空の行を削除するには「/bin/sed -i '/^$/d’ (ファイル名)」で空の行が削除されます

#!.bin/bash

FILE=test.txt

/bin/sed -i '/^$/d' ${FILE}

if [ ! -s $FILE ]; then
  echo "$FILE は0byte"
else
  ls -l $FILE
fi