[Linux] findコマンドでファイルを検索する(find)

2021年8月21日土曜日

Linux

linux pcのコマンドプロンプトを利用していてファイルを探したいことはありませんか?
本記事は find コマンドの使用方法を紹介します


findコマンドを使った検索方法

実際にコマンドプロンプトから動かしながら紹介します

カレントディレクトリ内の検索 : find ファイル名

最も基本的な使い方です。カレントディレクトリを起点にファイルを検索します
サブディレクトリを検索するにはディレクトリ名称を含める必要があります

find ファイル名

# 現在操作するディレクトリを出力
$ pwd
/dir_1

# dir_1の中身を表示
$ tree .
.
├── dir_2
│   └── file_4.txt
├── file_1.txt
├── file_2.txt
└── file_3.txt

# file_1.txtを検索
$ find file_1.txt
file_1.txt

# サブディレクトリ配下のファイルを検索しない
$ find file_4.txt
find: ‘file_4.txt’: そのようなファイルやディレクトリはありません

# サブディレクトリ配下はディレクトリ名を指定する必要がある
$ find ./dir_2/file_4.txt
./dir_2/file_4.txt

カレントディレクトリ内の再帰的検索 : find 検索先 -name ファイル名

検索対象のディレクトリから-nameで指定したファイル名のファイルを
サブディレクトリも含めて再帰的に検索します
*などの正規表現を使用しない場合ファイル名は完全一致のみ検索されます
検索先を / などのルートディレクトリにすることでファイルの全検索も可能です

find 検索先 -name ファイル名

# dir_1ディレクトリからサブディレクトリdir_2にあるfile_4.txtを検索
$ find ./ -name file_4.txt
./dir_2/file_4.txt

# ファイル名が完全一致していないため検索されない
$ find ./ -name file_4
(出力なし)

# dir_1ディレクトリ内の"file_"を含むファイルを再帰的に検索
$ find ./ -name file_\*
./file_1.txt
./file_2.txt
./file_3.txt
./dir_2/file_4.txt
  

空のファイル/ディレクトリの検索 : find 検索先 -empty

こちらは空のファイルやディレクトリを指定の検索先から再帰的に検索します
-type d でディレクトリのみ、 -type f でファイルのみを検索することも可能です

  find 検索先 -empty
  find 検索先 -empty -type d
  find 検索先 -empty -type f

# dir_1内の空のファイル、ディレクトリを検索
$ find ./ -empty
./dir_2/file_4.txt
./dir_3

# dir_1内の空のファイルを検索
$ find ./ -empty -type f
./dir_2/file_4.txt

# dir_1内の空のディレクトリを検索
$ find ./ -empty -type d
./dir_3
  

修正日時によるファイル/ディレクトリの検索 : find 検索先 -mtime

少し時間の指定に癖がありますが日時指定によってファイル検索が可能です

find 検索先 -mtime 日時

# 現在から5日前までのファイルを検索
$ find ./ -mtime -5

# 3日前(120時間前〜144時間前)のファイルを検索
$ find ./ -mtime 5

# 過去から3日前(120時間前〜過去)までのファイルを検索
$ find ./ -mtime +4
  

その他の検索オプションは下記のとおりです

オプション 概要
-mmin 最終修正日(分指定)
-mtime 最終修正日(日指定)
-amin 最終アクセス日(分指定)
-atime 最終アクセス日(日指定)

ファイルの中身を検索 : find 検索先 -type f | xargs grep '検索文字列'

grepコマンドと組み合わせることでファイルの中身の文字列を対象に検索することができます。なお grepコマンド の詳細はこちらをご覧ください

find 検索先 -type f | xargs grep '検索文字列'
grep '検索文字列' -lr 検索先

# カレントディレクトリdir_1から'target text'という文字列を含むファイルを検索
$ find ./ -type f | xargs grep 'target text'
./file_3.txt:target text

# grepのみでも同様のことを実現可能
$ grep 'target text' -lr ./
./file_3.txt
  

findコマンドとgrepコマンドの組み合わせの場合と、grepコマンドのみの場合では出力結果が異なります。

検索文字列を含む行も出力してほしい場合は findコマンド+grepコマンド
ファイル名のみ出力してほしい場合は grepコマンド
と言った使い分けができます

まとめ

linuxのfindコマンドの主だった使い方を紹介しました
まったく使わない訳ではないですが、毎日使うコマンドではないため使いたいときには忘れているかと思います。

この記事がそのような方の手助けになれば幸いです

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology