お兄ちゃん!
特定のファイルが
どこにあるかを調べられるかな?
全部のファイルのパスを覚えられないので
検索機能が欲しくなってきたよ…
もちろんできるよ!
今回はファイル検索コマンドを
見ていこう!
find コマンドfind は
ファイル検索コマンドだよ
以下のように実行するんだ
find 起点パス 検索オプション...
| 検索オプション | 意味 |
|---|---|
| -name ファイル名 | 指定されたファイル名を検索。 |
| -type ファイル種別 | 指定したファイル種別のファイルを検索(後述) |
| -user ユーザ名 | 指定された所有ユーザのファイルを検索 |
| -group グループ名 | 指定された所有グループのファイルを検索 |
| -size サイズ | ファイルサイズが指定以上のファイルを検索 |
| ファイル種別 | 意味 |
|---|---|
| f | 通常ファイル |
| d | ディレクトリ |
| l | シンボリックリンク |
ちょっと扱いが難しそうだね…
細かく条件を指定できるのが
find の特徴だけど初めてだと敷居が高く感じてしまうよねいくつか例を出すから見てごらん
find コマンド | 動作 |
|---|---|
find /home -type f -name "diary" | /home を起点に、 |
find /usr/share -type f -name "*.txt" | /usr/share を起点に、 |
find /tmp -user midori -group midori | /tmp を起点に、 |
find . | ワーキングディレクトリを起点に、 |
へぇ…柔軟にファイルを探せるのね!
locate コマンドlocate もファイル検索コマンドだよこちらはあらかじめ検索用データを作っておきそこからファイルを探すような動きをするんだlocate [オプション]... パターン...
find とどう違ってくるのかな?locate は find より高速な検索ができるけど指定されたパターンがパスに含まれているかどうかの簡単な条件でしか検索しかできないんだファイル名で探すことが多いので簡素でも十分役に立ちそう!
また検索用データ作成後の変更は検索に反映されないという問題もあるんだ
具体的には新しく作ったファイルが見つからなかったり削除済みのファイルが結果に表示されたりしてしまうよ
それはちょっと困るね…
updatedb はlocate の検索用データを作るよupdatedb [オプション]...
updatedb は1日1回などのタイミングで自動実行されるけど手動実行しても問題ないんだsudo は管理者権限でコマンドを実行するんだ検索用データは全ユーザ共通で使うのでこのデータの管理は管理者が行うよ手動実行する場合は以下のようにしよう!sudo updatedb
updatedb 実行直後にlocate を実行すると検索用データの情報が古い問題を回避できるね!xargs コマンドxargs は標準入力から受け取った内容をコマンドの引数にしてくれるんだxargs [オプション]... [コマンド]
以下のように検索コマンドと一緒に使われることが多いよ
find ... | xargs コマンド
どのように使えばいいんだろう?
例えば、以下は
/tmp にある所有者が midori のファイルを削除するよfind /tmp -type -f -user midori | xargs rm
find の結果をxargs に渡すとrm の引数にして実行してくれるんだね!今回はファイル検索コマンド
find と locate を学んだよ!また xargs と組み合わせて見つかったファイルを処理する方法も知ったよ!find と locate にはそれぞれ特徴があるからかしこく使い分けよう!