Bash でファイルが空かどうかを確認する

Faaiq Bilal 2024年2月15日
  1. test コマンドと -s オプション フラグを使用して、Bash でファイルが空かどうかを確認する
  2. ls コマンドを使用して、Bash でファイルが空かどうかを確認する
Bash でファイルが空かどうかを確認する

多くの場合、ファイルが空かどうかを確認する必要があります。ありがたいことに、端末で Bash を使用するか、Bash スクリプトを使用して確認する簡単な方法がいくつかあります。

test コマンドと -s オプション フラグを使用して、Bash でファイルが空かどうかを確認する

test コマンドは、最も役立つシェル組み込みコマンドの 1つで、ファイルとディレクトリに関する多くのオプションがあります。 test コマンドの -s オプションは、ファイルのサイズが 0 より大きいかどうかをチェックします。

ファイル サイズが 0 を超える場合、コマンドは true を返します。 それ以外の場合は false を返します。

test -s の使用法を以下に示します。 testコマンドについて例を挙げて説明します。

この例では、newFile.txt というファイルがあります。 次のように、empty_test.sh という名前の Bash スクリプトを作成します。

#!/bin/bash
test -s newFile.txt && echo "file has something" || echo "file is empty"

ファイル newFile.txt が空の場合、シェルには次の出力が表示されます。

空の出力

一方、newFile.txt に次のようなコンテンツがある場合:

Hello!

出力は次のようになります。

空でない出力

上記のコマンドは、選択したファイルが空かどうかを確認する簡単な方法です。 test -s newFile.txt が true と評価された場合、file has something を出力します。

それ以外の場合は、ファイルが空ですと出力されます。 このコマンドは、Bash スクリプトで使用するか、ターミナルで直接実行できます。

このコマンドをチェック対象のファイルとは異なるディレクトリまたはレベルで使用する場合は、完全なファイル パスを記述する必要があることに注意してください。

上記のコマンドを記述する別の方法があります。 Bash では、[ もシェルの組み込みであり、test コマンドと同等です。

#!/bin/bash
[ -s newFile.txt ] && echo "file has something" || echo "file is empty"

このコマンドは、以前に使用したコマンドと同等です。

test -s コマンドを使用して、特定のディレクトリ内のすべての空のファイルを見つけることもできます。

#!/bin/bash
for file in *.txt;
do if [ ! -s $file ];
then echo $file;
fi;
done

上記のコマンドは、ディレクトリ内のすべての空の .txt ファイルの名前を出力します。 .txt を別の拡張子に置き換えるだけで、さまざまな種類のファイルをチェックするように簡単にカスタマイズできます。

ls コマンドを使用して、Bash でファイルが空かどうかを確認する

ls コマンドは、現在のディレクトリ内のすべてのファイルとサブディレクトリを一覧表示します。 ls コマンドを -s オプション フラグと共に使用して、ファイル名の横にファイルのサイズを表示することもできます。

たとえば、2つのサブディレクトリと .docx ファイルで作成した test ディレクトリで ls -s コマンドを実行すると、次の出力が得られます。

MacOS ls 出力

macOS では、このコマンドはすべてのサブディレクトリのサイズを 0 として表示することに注意することが重要です。これは、サブディレクトリに他のコンテンツがあるかどうかに関係ありません。

また、使用されているデフォルトのシェルは zsh (bash ではありません) であることにも注意してください。 ただし、これはシェルによる違いではなく、オペレーティング システム自体による違いです。

この結果を Linux 環境で、具体的には bash を使用して説明するために、Test 1Test 2 というタイトルの 2つの空のディレクトリを含むテスト フォルダーを作成しました。 また、test.txt には小さな文字列が含まれ、test2.txt は空のテキスト ファイルです。

Linux ls 出力

内容のサイズに関係なく、サブディレクトリは 4 キロバイト として表示されます。 これは、フォルダの実際の内容を表すものではありません。 これは、エントリ自体が占めるスペースです。

より良い方法は、-l オプション フラグを指定して ls コマンドを使用することです。これにより、より多くの情報が表形式で表示されます。

ls -l

このコマンドは、前と同じ Test ディレクトリで実行します。 出力は次のとおりです。

Linux ls l 出力

上記のように、ls -l コマンドはより多くの情報を提供し、サブディレクトリの正しいサイズを示します。

サイズを KB、MB、および GB で表示するには、オプション -lh を使用します。 h フラグを含めると、データがより読みやすくなります。

出力は次のようになります。

Linux ls lh 出力

関連記事 - Bash File