Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Linux Bash: To search an empty folder (easy script)

2025年09月15日に「Dev.to」が公開したITニュース「Linux Bash: To search an empty folder (easy script)」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Linux Bashスクリプトを使い、指定したディレクトリ内で空のフォルダを探す簡単な方法を紹介する。検索する場所と深さを設定でき、ファイルが入っていないフォルダを効率的に見つけるのに役立つ。システム整理に活用できるだろう。

ITニュース解説

このニュース記事は、Linux環境で「Bash」と呼ばれる強力なコマンドラインシェルを使って、特定のディレクトリ内にある空のフォルダを効率的に見つけ出すためのシンプルなスクリプトを紹介している。システムエンジニアを目指す上で、Linuxの基本的な操作やシェルスクリプトの作成能力は不可欠なスキルであり、このスクリプトはその第一歩として非常に良い例となるだろう。

まず、Bashスクリプトとは何かを理解する必要がある。Bashは「Bourne-Again SHell」の略で、LinuxやmacOSなどのUnix系OSで標準的に使われるコマンドラインインターフェース(CUI)だ。普段私たちがキーボードからコマンドを入力してコンピュータに指示を出すときに使っているのがこのシェルである。スクリプトとは、これらのコマンドをテキストファイルに順番に記述し、まとめて実行できるようにしたプログラムのことを指す。一つ一つのコマンドを手動で入力する手間を省き、複数の処理を自動化できるため、システム管理や開発作業において非常に重宝される。

今回紹介されているスクリプトの目的は、指定したディレクトリの中から、内容が一切入っていない「空のフォルダ」を探し出すことにある。システム運用では、不要なファイルやフォルダが散乱し、ディスク容量を圧迫したり、管理を複雑にしたりすることがよくある。特に空のフォルダは忘れ去られがちだが、これらを定期的に整理することで、システムの健全性を保つことができる。このスクリプトは、そうした整理作業の一助となる基本的なツールだ。

スクリプトの各行を見ていこう。

最初の行にある#!/bin/bashは「シェバン」と呼ばれ、このスクリプトがBashシェルによって実行されるべきことをOSに教えている。スクリプトを実行する際には、この記述があることで、明示的にBashコマンドを指定しなくても、OSが自動的に適切なシェル(この場合はBash)を呼び出してスクリプトを解釈・実行してくれる。

次のecho -n "Add the directory where to search "という行は、ユーザーに対してメッセージを表示するためのものだ。echoコマンドは指定した文字列を画面に出力し、-nオプションを付けることで、メッセージの後に改行を入れないようにしている。これにより、次の行でユーザーが入力するプロンプトがメッセージの直後に表示され、より自然な対話形式となる。表示されるメッセージは「検索するディレクトリを追加してください」という意味だ。

その次のread directorypathという行は、ユーザーからの入力を受け取るためのものだ。readコマンドは、ユーザーがキーボードから入力した内容を、指定した変数に格納する。ここでは、ユーザーが入力した文字列がdirectorypathという変数に代入される。この変数は、後で検索の開始パスとして利用される。

同様に、echo -n "Add the searchdepth "は「検索深度を追加してください」というメッセージを表示し、read searchdepthはユーザーが入力した数値をsearchdepthという変数に格納する。このsearchdepth変数は、後で検索の深さを制限するために使われる。

スクリプトの核心部分となるのが、最後の行のfind $directorypath -maxdepth $searchdepth -type d -empty 2>/dev/nullだ。これはfindコマンドと呼ばれる非常に強力なコマンドで、ファイルシステム内を探索し、指定した条件に合致するファイルやディレクトリを見つけ出す役割を持つ。

このfindコマンドに与えられている引数を一つずつ見ていく。 まず、$directorypathは、先ほどユーザーが入力した検索開始ディレクトリのパスが展開される部分だ。例えば、ユーザーが/home/user/documentsと入力していれば、findコマンドは/home/user/documentsから検索を開始する。

次に-maxdepth $searchdepthは、検索の深さを制限するためのオプションだ。$searchdepthにはユーザーが入力した数値が入り、例えばユーザーが「2」と入力すれば、findコマンドはdirectorypathで指定されたディレクトリを起点として、その直下のサブディレクトリ(深さ1)と、さらにその下のサブディレクトリ(深さ2)までを検索対象とする。これより深い階層にあるディレクトリは検索対象から除外されるため、検索範囲を絞り込み、不要な時間の消費やリソースの無駄遣いを防ぐことができる。

-type dというオプションは、検索対象を「ディレクトリ(d)」に限定するためのものだ。findコマンドはデフォルトではファイルやディレクトリなど、あらゆるエントリを検索するが、このオプションを指定することで、目的である空の「フォルダ」だけを探すことができる。もしファイルを検索したい場合は-type fと指定するなど、様々なタイプを指定できる。

-emptyというオプションは、ファイルやディレクトリが「空である」という条件を指定するものだ。-type dと組み合わせて使うことで、「中身が空のディレクトリ」を探し出すことができる。ファイルの場合であれば、サイズがゼロのファイルが対象となる。

最後の2>/dev/nullは、エラーメッセージを非表示にするための記述だ。Linuxでは、プログラムの標準出力(通常は画面に表示される結果)は「1」、標準エラー出力(エラーメッセージなど)は「2」という番号で区別されている。2>は標準エラー出力をリダイレクトするという意味で、/dev/nullは、データを受け取っても何もせず破棄する特殊なデバイスファイルだ。つまり、この記述は「findコマンドの実行中に発生したエラーメッセージは、すべて/dev/nullに送りつけて、表示しないようにする」という意味になる。これは、検索対象のディレクトリの中に、アクセス権限がないためにfindコマンドが読み取れない場所があった場合などに、画面が大量のエラーメッセージで埋め尽くされるのを防ぎ、見つけ出したい空のフォルダのリストだけをきれいに表示させるための工夫である。

このスクリプトは非常にシンプルだが、Bashスクリプトの基本的な要素である変数、ユーザー入力、コマンドのオプション指定、そしてエラー処理といった概念を学ぶ上で、素晴らしい出発点となる。システムエンジニアにとって、ファイルシステムを探索し、管理する能力は非常に重要であり、このような簡単なスクリプトを理解し、さらに自分のニーズに合わせて改造できるようになることは、実務に役立つスキルを身につけるための大きな一歩となるだろう。このスクリプトを動かし、オプションを色々と変更してみることで、Bashとfindコマンドの理解を深めることが可能になる。

関連コンテンツ