RSS フィードを購読する
Linux 

find コマンドは、特に先進的なコンピュータで数百、数千ものファイルやフォルダーを扱う際に、非常に役立つ Linux コマンドの 1 つです。その名が示す通り、find はさまざまなものを検索できます。検索できるのはファイル名だけではありません。

自分のコンピュータで作業している場合も、不慣れなシステムで作業する人をサポートする場合も、find を使って重要なデータを見つけることができます。その 10 の方法をご紹介します。

[ よく使うコマンドをすぐに確認できる Linux コマンドチートシートはこちら ]

1.名前で 1 つのファイルを検索する

ファイル名はわかっているものの保存場所が思い出せない場合は、find を使ってホームディレクトリを検索します。権限エラーを非表示にするには、2>/dev/null を使用します (または、sudo を使用してすべての権限を取得します)。

 $ find / -name "Foo.txt" 2>/dev/null /home/seth/Documents/Foo.txt

2.おおよその名前で 1 つのファイルを検索する

正確なファイル名を思い出せない場合や、ファイル名に大文字が使われているかどうかわからない場合は、以下のようにすると、大文字と小文字を区別しないで部分一致検索を実行できます。

 $ find / -iname "*foo*txt" 2>/dev/null /home/seth/Documents/Foo.txt /home/seth/Documents/foo.txt /home/seth/Documents/foobar.txt

3.すべてを検索する

ls -R コマンドはディレクトリのコンテンツを再帰的に一覧表示します。つまり、指定したターゲットだけでなく、そのターゲット内のすべてのサブディレクトリ (存在する場合はそのサブディレクトリ、さらにそのサブディレクトリ、以下同様) まで一覧表示します。find コマンドでも -ls を使用して同じことができます。

 $ find ~/Documents -ls 3554235 0 drwxr-xr-x [...] 05:36 /home/seth/Documents/ 3554224 0 -rw-rw-r-- [...] 05:36 /home/seth/Documents/Foo 3766411 0 -rw-rw-r-- [...] 05:36 /home/seth/Documents/Foo/foo.txt 3766416 0 -rw-rw-r-- [...] 05:36 /home/seth/Documents/Foo/foobar.txt

この例では 2>/dev/null を使用していないことに注意してください。これは、ホームディレクトリ内のファイルパスのコンテンツのみを一覧表示しており、権限エラーが発生する可能性がないからです。

4.内容で検索する

find コマンドが実行できるタスクは 1 つだけではありません。実際、find では、find が返す結果に対して別のコマンドを実行することもできます。これは特に、ファイルを名前ではなく内容で検索する必要がある場合や、名前と内容で検索する必要がある場合に便利です。

 $ find ~/Documents/ -name "*txt" -exec grep -Hi penguin {} \; /home/seth/Documents/Foo.txt:I like penguins. /home/seth/Documents/foo.txt:Penguins are fun.

[ 成功するための Linux 環境管理についてはこちら ]

5.ファイルの種類で検索する

-type を使用すると、ファイル、ディレクトリ、シンボリックリンク、名前付きパイプ、ソケットなどを表示できます。

 $ find ~ -type f /home/seth/.bash_logout /home/seth/.bash_profile /home/seth/.bashrc /home/seth/.emacs /home/seth/.local/share/keyrings/login.keyring /home/seth/.local/share/keyrings/user.keystore /home/seth/.local/share/gnome-shell/gnome-overrides-migrated [...]

GNU バージョンの find を使用している場合は、検索結果に複数のファイルの種類を含めることができます。

 $ find ~ -type f,l -name "notebook*" /home/seth/notebook.org /home/seth/Documents/notebook-alias.org

6.ディレクトリのみを一覧表示する

ls コマンドの欠点は、結果をファイルの種類で絞り込めないことです。そのため、パス内のディレクトリのみを一覧表示したい場合には、不要な情報が多く含まれることがあります。そのようなときには、find コマンドに -type d を組み合わせます。

 $ find ~/Public -type d find ~/Public/ -type d /home/seth/Public/ /home/seth/Public/example.com /home/seth/Public/example.com/www /home/seth/Public/example.com/www/img /home/seth/Public/example.com/www/font /home/seth/Public/example.com/www/style

7.検索結果の表示を制限する

デフォルトのユーザーディレクトリ内に数百のファイルがあり、その外側にも数千のファイルがある場合、find の結果が非常に多くなってしまうことがあります。-maxdepth に続けて、find の対象とするディレクトリの階層数を指定すると、検索の深さを制限できます。

 $ find ~/Public/ -maxdepth 1 -type d /home/seth/Public/ /home/seth/Public/example.com

8.空のファイルを見つける

整理整頓のために空のファイルを見つけたい場合があります。

 $ find ~ -type f -empty random.idea.txt

find を使って空のファイルを削除することは技術的には可能ですが、ファイルをプログラムで削除するのは危険です。たとえば、空のファイルを検索するときに -type f を入れ忘れると、結果にはディレクトリも含まれます。この場合、delete フラグを追加していると、重要なディレクトリ構造が削除されてしまいます。

find コマンドを書いたら、結果を確認してから削除することが極めて重要です。さらに、find で delete フラグの場所を間違えると、修飾が適用される前の結果で削除を実行してしまう可能性があります (たとえば、delete フラグを type フラグの前に配置すると、ファイルのみを削除しようとしたコマンドでディレクトリまで削除してしまいます)。

find を使ってファイルを削除することはあまりありませんが、その場合には xargs か、Paralleltrash コマンドを使用した方がよいでしょう。

9.ファイルの経過期間で検索する

-mtime を使用すると、検索対象を指定した値の 24 倍より古い/新しいファイルに限定できます。

 $ find /var/log -iname "*~" -o -iname "*log*" -mtime +30

-mtime で指定する数値の前の + は、その数値を時間に加算するという意味ではありません。これは、(この例では) 24 × 30 より大きい値に一致するという条件文です。つまり、このサンプルコードは 1 カ月以上変更されていないログファイルを検索します。

過去 1 週間以内に変更されたログファイルを検索するには、- 条件を使用します。

 $ find /var/log -iname "*~" -o -iname "*log*" -mtime -7 /var/log/tallylog /var/log/cups/error_log /var/log/cups/access_log /var/log/cups/page_log /var/log/anaconda/anaconda.log /var/log/anaconda/syslog /var/log/anaconda/X.log [...]

-ls フラグについてはすでに説明しましたが、このコマンドと組み合わせるとより詳細な情報を得ることができます。

 $ find /var/log -iname "*~" -o -iname "*log*" -mtime -7 -ls -rw-------  1 root root            0 Jun  9 18:20 /var/log/tallylog -rw-------  1 root lp      332 Aug 11 15:05 /var/log/cups/error_log -rw-------  1 root lp      332 Aug 11 15:05 /var/log/cups/access_log -rw-------  1 root lp      332 Aug 11 15:05 /var/log/cups/page_log -rw-------  1 root root  53733 Jun  9 18:24 /var/log/anaconda/anaconda.log -rw-------  1 root root 835513 Jun  9 18:24 /var/log/anaconda/syslog -rw-------  1 root root  21131 Jun  9 18:24 /var/log/anaconda/X.log [...]

10.パスを検索する

必要なファイルまでのディレクトリ構造はわかっているものの、システム内のどこにそのディレクトリ構造があるのかわからない場合があります。パス文字列内を検索するには -ipath を使用します。これを指定すると、ドットとスラッシュは正規表現文字ではなく、ドットとスラッシュとして扱われます。

 $ find / -type d -name 'img' -ipath "*public_html/example.com*" 2>/dev/null /home/tux/Public/public_html/example.com/font

まとめ

find コマンドはシステム管理者に必須のツールです。新しいシステムについて調査したり、理解したり、間違った場所に置かれたデータを探したり、日々発生する問題をトラブルシューティングしたりする際に役立ちます。とはいえこれは、単なる便利ツールの 1 つでしかありません。

[ Linux find チートシートをダウンロードして、ショートカットをすべて 1 カ所にまとめておきましょう ]

find を使用するのに特別な理由は必要ありません。find を使えば、システム内を探し回る手間をかけずに、簡単に目的のものを検索できます。目立たないながらも非常に便利なツールであり、日々の Linux 管理作業に大きな喜びをもたらしてくれるでしょう。今すぐ使い始めて、その素晴らしさを実感してください。


執筆者紹介

Seth Kenlon is a Linux geek, open source enthusiast, free culture advocate, and tabletop gamer. Between gigs in the film industry and the tech industry (not necessarily exclusive of one another), he likes to design games and hack on code (also not necessarily exclusive of one another).

Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

チャンネル別に見る

automation icon

自動化

テクノロジー、チームおよび環境に関する IT 自動化の最新情報

AI icon

AI (人工知能)

お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート

open hybrid cloud icon

オープン・ハイブリッドクラウド

ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。

security icon

セキュリティ

環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報

edge icon

エッジコンピューティング

エッジでの運用を単純化するプラットフォームのアップデート

Infrastructure icon

インフラストラクチャ

世界有数のエンタープライズ向け Linux プラットフォームの最新情報

application development icon

アプリケーション

アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細

Virtualization icon

仮想化

オンプレミスまたは複数クラウドでのワークロードに対応するエンタープライズ仮想化の将来についてご覧ください