はじめに
今回は、findコマンドを使ってファイルが見つからなかった場合の処理について紹介します。
findコマンドは Unix 系 OS でファイルを検索するために使われます。ただファイルを検索するだけではなく、パイプでつなぐことで見つかったファイルに対して 1 つずつ何かの処理をすることもできます。
さて、find コマンドで検索した結果、該当のファイルが 1 つも見つからなかった場合の処理はどう書いたら良いのでしょうか?
検証環境
| |
find を grep をパイプでつなぎ、ファイルの検出を判定
find の実行結果を grep -q . コマンドにパイプで渡します。
これは、grep . コマンドと同じ意味で、find の検索結果に何かしらの文字列があるかどうかを判定するために使われます。
違いは -qオプションです。
-q オプションは、 結果を表示せずに正常終了コードを返すことを意味します。
文字列が見つかった場合は 0 を返し、見つからなかった場合は 1 を返します。
以下のコードは、 /usr ディレクトリ下にある拡張子が .yaml のファイルを検索し、見つかった場合は “File found” と出力します。見つからなかった場合は “File not found” と出力します。
| |
$? は、直前に実行したコマンドの終了ステータスを表します。
0 は正常終了を表し、それ以外の数値は異常終了を表します。
この例では、grep コマンドがファイルを見つけた場合に 0 を返し、それ以外の場合は 1 を返します。
更に上記のコードをワンライナーで書くと以下のようになります。
| |
ひとこと
find の実行結果を判定する場合には、grep -q . コマンドを使うと便利です。
正常終了コードが使われるため、if 文で簡単に判定できます。