トップ > Linuxらしい使い方を覚える >
ファイルやディレクトリを探す3種類の方法

  

ファイルを探す3つの方法

ファイルやディレクトリに関する内容はまだまだ続きます。 この記事では、ディレクトリツリーからファイルやディレクトリを探し出すいくつかの方法を解説します。

ここで紹介するのは、

  1. which コマンド
  2. locate コマンド
  3. find コマンド

の3つのコマンドを使う方法です。 それぞれ以下で詳しく解説します。

  
もちろん、ファイルマネージャからファイルやディレクトリを探すこともできます。

which コマンド

最初に紹介するのは which コマンドで探す方法です。 探せるのはコマンドやアプリケーションのみであり、画像ファイルや文書ファイルなどは探すことができません。 また、ディレクトリを探すこともできません

以下のように which コマンドの後ろにコマンド名やアプリケーション名を指定して実行します。

taro@myhostname:~$ which gimp
/usr/bin/gimp
taro@myhostname:~$

このように、画像編集ソフトウェア GIMP のフルパスが /usr/bin/gimp であることがわかります。

  
which コマンドは環境変数 PATH に列挙されているディレクトリを順に調べます。 最初に見つかった時点でそれ以降の検索は中断します。 ただし、オプション -a を付けることで一致するファイル全てを表示させることもできます。

locate コマンド

続いて紹介するのは locate コマンドです。 locate コマンドは、指定された名前を含むファイルやディレクトリを高速に検索することができます

ただし、locate コマンドはディレクトリツリー内を実際に検索するのではなく、あらかじめ作成されているデータベースから情報を取得します

以下のように locate コマンドの後ろにキーワードを指定して実行します。

taro@myhostname:~$ locate bash
/etc/bash.bashrc
/etc/bash_completion
/etc/bash_completion.d
/etc/apparmor.d/abstractions/bash
        ...(省略)...
/var/lib/dpkg/info/bash.md5sums
/var/lib/dpkg/info/bash.postinst
/var/lib/dpkg/info/bash.postrm
/var/lib/dpkg/info/bash.prerm

このように、bash というテキストを含むファイルが列挙されます。 なお、上で書いた通り、これらの情報はデータベースから検索された結果です。 最新の状態ではありません

データベースは定期的に最新の情報に更新されます。 Linux Mint 21.3 では、毎朝6時25分に更新されるように設定されています。

なお、手動でデータベースを更新することもできます。 データベースを更新するためのコマンドは updatedb コマンドです。

ただし、管理者ユーザの権限が必要であるため、以下のように sudo コマンドを使って実行する必要があります。

taro@myhostname:~$ sudo updatedb
[sudo] taro のパスワード:
taro@myhostname:~$
  
sudo コマンドを実行するには(あなたの)パスワードの入力が必要です。 sudo コマンドについては別の記事で詳しく紹介します

find コマンド

最後に紹介するのが find コマンドです。 find コマンドはファイルとディレクトリの両方を探すことができます。 また、データベースではなくディレクトリツリーを実際に検索するため、最新の状態が検索されます

find コマンドの最も簡単な使い方は、以下のように引数無しで実行する方法です。 引数無しで実行した場合には、カレントディレクトリ以下の全ファイルが検索されます。

taro@myhostname:~$ find
.
./.cache
./.cache/ibus
./.cache/ibus/bus
./.cache/ibus/bus/registry
./.cache/mozilla
./.cache/mozilla/firefox
        ...(省略)...
./.mozilla/firefox/Crash Reports/events
./.mozilla/firefox/installs.ini
./.mozilla/extensions

このようにファイルの一覧が表示されます。 カレントディレクトリだけでなく、カレントディレクトリの下のディレクトリもたどります(子ディレクトリ・孫ディレクトリ・ひ孫ディレクトリ...)。

以下のように検索を開始するディレクトリを指定することができます。 この場合には /etc と /bin の2つのディレクトリ以下が検索されます。

taro@myhostname:~$ find /etc /bin
/etc
/etc/appstream.conf
/etc/netplan
/etc/netplan/01-network-manager-all.yml
/etc/fwupd
/etc/fwupd/msr.conf
/etc/fwupd/daemon.conf
/etc/fwupd/remotes.d
/etc/fwupd/remotes.d/dell-esrt.conf
/etc/fwupd/remotes.d/vendor-directory.conf
        ...(省略)...
/etc/sensors.d
/etc/sensors.d/.placeholder
/etc/gnome-system-tools
/etc/gnome-system-tools/user-profiles.conf
/bin
taro@myhostname:~$

指定するディレクトリは1つでもいいですし、3つでも7つでも構いません。

ファイル名を条件に検索することもできます。 以下の例では、/home/taro/Pictures 以下にあるJPEGファイルを洗い出すことができます。

taro@myhostname:~$ find /home/taro/Pictures -name '*.jpg'
/home/taro/Pictures/hana.jpg
/home/taro/Pictures/raku.jpg
taro@myhostname:~$

ファイル種別を指定して検索することもできます。 以下の例では、ホームディレクトリ以下にあるシンボリックリンクを探すことができます。

taro@myhostname:~$ find ~ -type l
/home/taro/Copied.txt
/home/taro/Nikki.txt
/home/taro/.config/menus/mate-applications-merged
/home/taro/.mozilla/firefox/5v6zvy9w.default-release/lock
taro@myhostname:~$
-type 説明
f 通常のファイル
d ディレクトリ
l シンボリックリンク

この他にもパーミッションで探したり(-perm オプション)、所有者で探すこともできます(-user)。 また "3日以内に変更されたもの" や "最後の修正から1年以上経過したもの" というような条件で探すこともできます。

また、find コマンドには便利なオプション -exec があり、検索されたファイルに対して別のコマンドを実行することができます。 例えば、

taro@myhostname:~$ find /home/taro/Pictures -name '*.jpg' -exec rm -i {} \;
rm: 通常ファイル '/home/taro/Pictures/hana.jpg' を削除しますか? y
rm: 通常ファイル '/home/taro/Pictures/raku.jpg' を削除しますか? y
taro@myhostname:~$

とすることで、/home/taro/Pictures ディレクトリ以下のJPEGファイルを確認しながら削除することができます。

  
{} の部分は検索されたファイルのファイルパスに置き換わります。
  
find コマンドは多彩な使い方が可能であるため、詳細はマニュアルに譲ります。 man find で確認してください。
  
  

まとめ

ファイルやディレクトリを検索するには、

  1. which コマンド
  2. locate コマンド
  3. find コマンド

の3つのコマンドを使う方法がオススメです。

which コマンドは環境変数 PATH に列挙されているディレクトリからコマンドやアプリケーションを探し出します。 高速ですが、コマンドやアプリケーション以外は探せません。

locate コマンドはファイルもディレクトリも探し出すことができ、かつ、動作も高速です。 ただし、データベースから情報を取得しているため最新ではない可能性があります。 データベースを最新の状態に更新するには、以下のように updatedb コマンドを管理者権限で実行する必要があります。

sudo updatedb

find コマンドはファイルもディレクトリも探し出すことができ、かつ、ディレクトリツリーを実際に検索します。 よって、最新の状態を検索することができます。 また、名前やファイル種別・パーミッションや所有者という条件で探すこともできます。

操作/コマンド 説明
which 指定されたコマンドやアプリケーションのフルパスを表示する
locate 指定されたキーワードを含むファイルやディレクトリをデータベースから検索する
updatedb locate用のデータベースを最新の情報に更新する
find 指定されたディレクトリ以下のファイルやディレクトリを指定された条件で探す

find コマンドには、検索したファイルを別コマンドに渡すための -exec オプションという便利なものもあります。

メニュー