findコマンドを実行した結果、ファイルが 1 つも見つからなかった場合の判定
はじめに
今回は、find
コマンドを使ってファイルが見つからなかった場合の処理について紹介します。
find
コマンドは Unix 系 OS でファイルを検索するために使われます。ただファイルを検索するだけではなく、パイプでつなぐことで見つかったファイルに対して 1 つずつ何かの処理をすることもできます。
さて、find
コマンドで検索した結果、該当のファイルが 1 つも見つからなかった場合の処理はどう書いたら良いのでしょうか?
検証環境
$ uname -moi
aarch64 aarch64 GNU/Linux
$ head -n 3 /etc/os-release
PRETTY_NAME="Ubuntu Kinetic Kudu (development branch)"
NAME="Ubuntu"
VERSION_ID="22.10"
$ bash -version | head -n 1
GNU bash, バージョン 5.2.0(1)-release (aarch64-unknown-linux-gnu)
$ find --version | head -n 2
find (GNU findutils) 4.9.0
Copyright (C) 2022 Free Software Foundation, Inc.
$ grep --version | head -n 2
grep (GNU grep) 3.7
Copyright (C) 2021 Free Software Foundation, Inc.
find
を grep
をパイプでつなぎ、ファイルの検出を判定
find
の実行結果を grep -q .
コマンドにパイプで渡します。
これは、grep .
コマンドと同じ意味で、find
の検索結果に何かしらの文字列があるかどうかを判定するために使われます。
違いは -q
オプションです。-q
オプションは、 結果を表示せずに正常終了コードを返すことを意味します。
文字列が見つかった場合は 0 を返し、見つからなかった場合は 1 を返します。
以下のコードは、 /usr
ディレクトリ下にある拡張子が .yaml
のファイルを検索し、見つかった場合は "File found" と出力します。見つからなかった場合は "File not found" と出力します。
find /usr -name "*.yaml" | grep -q .
if [ $? -eq 0 ]; then
echo "File found"
else
echo "File not found"
fi
$?
は、直前に実行したコマンドの終了ステータスを表します。
0 は正常終了を表し、それ以外の数値は異常終了を表します。
この例では、grep
コマンドがファイルを見つけた場合に 0 を返し、それ以外の場合は 1 を返します。
更に上記のコードをワンライナーで書くと以下のようになります。
$ find /usr -name "*.go" | grep -q . && echo "File found" || echo "File not found"
File found
$ find /usr -name "*.yaml" | grep -q . && echo "File found" || echo "File not found"
File not found
ひとこと
find
の実行結果を判定する場合には、grep -q .
コマンドを使うと便利です。
正常終了コードが使われるため、if 文で簡単に判定できます。
ディスカッション
コメント一覧
まだ、コメントがありません