あのファイルって
どこにあったっけ…
ファイル検索ができると
便利なんだけどなぁ
もちろんできるよ!
今回はファイル検索コマンドを
見ていこう!
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 /var -size 100M | /var を起点に、 |
へぇ…柔軟にファイルを探せるのね!
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
にはそれぞれ特徴があるからかしこく使い分けよう!