
こんにちは。よっしーです(^^)
今日は、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.txtとfile4.txt、file3.txtの3つのファイルが検索されます。file1.txtは、深さ1のファイルであるため、対象外となります。
おわりに
今日は、findコマンドでカレントディレクトリを対象外にする方法についてご紹介しました。
シェルスクリプトを書いていると痒い所に手を伸ばそうとするとどうしたら良いか分からない場面に遭遇すると思いますが、コマンドのヘルプやネットで検索してみると解決方法が見つかると思います。今は、ChatGPTでもヒントを得られるかもしれませんね。

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


コメント