findコマンドでカレントディレクトリを検索対象外にする方法

スポンサーリンク
findコマンドでカレントディレクトリを検索対象外にする方法 ノウハウ
findコマンドでカレントディレクトリを検索対象外にする方法
この記事は約4分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、findコマンドでカレントディレクトリを対象外にする方法についてご紹介します。

スポンサーリンク

背景

とあるディレクトリ内でディレクトリだけを検索しようとして、下記のコマンドを実行します。

find . -type d

すると下記の結果になりました。

.
./dir1
./dir2
./dir3

このとき、一番上にある . (カレントディレクト) を出力したくない場面がありました。

それは、ディレクトリ内のファイルだけを出力したい場合です。

たとえば、下記のようなコマンドを実行します。

find . -type d | xargs ls

実行結果は下記のようになります。

.:
dir1            dir2            dir3            file1.txt       file2.txt       file3.txt

./dir1:
file1_1.txt

./dir2:
file2_1.txt

./dir3:
file3_1.txt

ほしい結果は、下記です。

./dir1:
file1_1.txt

./dir2:
file2_1.txt

./dir3:
file3_1.txt

対応策

findコマンドに -mindepth 1 オプションを指定して、実行すると下記の結果になりました。

% find . -type d -mindepth 1 
./dir1
./dir2
./dir3

続いて、ファイルを出力するために下記のコマンドを実行しました。

find . -type d -mindepth 1 | xargs ls

実行結果は、下記のようになりました。

./dir1:
file1_1.txt

./dir2:
file2_1.txt

./dir3:
file3_1.txt

カレントディレクトリを除いたファイルの一覧を取得することができました。

もっとシンプルにこちらでも良いかもしれません。

% find . -type f -mindepth 2 
./dir1/file1_1.txt
./dir2/file2_1.txt
./dir3/file3_1.txt

こちらの出力形式のほうがスクリプトを書く際は扱いやすい気がしますね。

解説

find . -type f -mindepth 2 

このコマンドは、カレントディレクトリ(.)以下のファイルを検索するfindコマンドです。以下にコマンドの解説をします。

  • -type f: -typeオプションは、検索するオブジェクトのタイプを指定します。fはファイルを表します。したがって、このオプションはファイルのみを検索することを指定しています。
  • -mindepth 2: -mindepthオプションは、検索を開始するディレクトリの深さの最小値を指定します。この場合、値として2が指定されています。これは、カレントディレクトリは検索から除外し、深さ2以上のファイル以下を検索することを意味します。つまり、カレントディレクトリは対象外になります。

このコマンドを実行すると、カレントディレクトリ以下の深さ2以上のファイルが検索されます。深さ1(カレントディレクトリ直下)のファイルは検索対象外です。

例えば、以下のようなディレクトリ構造がある場合を考えます。

./
├── file1.txt (深さ1)
├── dir1/
│   ├── file2.txt (深さ2)
│   └── dir2/
│       └── file3.txt (深さ3)
└── dir3/
    └── file4.txt (深さ2)

上記のコマンドを実行すると、file2.txtfile4.txt、file3.txtの3つのファイルが検索されます。file1.txtは、深さ1のファイルであるため、対象外となります。

おわりに

今日は、findコマンドでカレントディレクトリを対象外にする方法についてご紹介しました。

シェルスクリプトを書いていると痒い所に手を伸ばそうとするとどうしたら良いか分からない場面に遭遇すると思いますが、コマンドのヘルプやネットで検索してみると解決方法が見つかると思います。今は、ChatGPTでもヒントを得られるかもしれませんね。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました