このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】柔軟な検索:findコマンド

findコマンドの概要

 findコマンドは、LinuxやUnix系システムでディレクトリツリーを再帰的に検索し、特定の条件に一致するファイルやディレクトリを見つけるための強力なツールです。検索条件や実行するアクションを指定することで、柔軟にファイル検索や操作を行うことができます。

基本構文

find [検索ディレクトリ] [検索条件] [実行するアクション]

主な検索条件と説明

以下の表に、findコマンドの主な検索条件とその説明をまとめます。

オプション説明
-nameファイル名で検索(例: -name "filename")。ワイルドカードが使用可能
-permパーミッションで検索(例: -perm 644)。数値モードまたはシンボリックモードが使用可能
-typeファイルの種類で検索(例: -type f はファイル、-type d はディレクトリ、-type l はシンボリックリンク)
-user所有者で検索(例: -user username
-uid所有者のUIDで検索(例: -uid 1000
-maxdepth最大検索深度を指定(例: -maxdepth 2)。検索するディレクトリの階層の深さを制限
-mindepth最小検索深度を指定(例: -mindepth 1)。検索を開始するディレクトリの階層の深さを指定
主な検索条件と説明

実行するアクションと説明

以下の表に、findコマンドの主な実行するアクションとその説明をまとめます。

アクション説明
-print条件に一致するファイルやディレクトリのパスを表示
-ls条件に一致するファイルやディレクトリの詳細情報を表示
-exec条件に一致するファイルやディレクトリに対してコマンドを実行(例: -exec rm {} \;)。 {} は一致したファイルのプレースホルダー
実行するアクションと説明

コマンドの使用例と解説

1.特定の名前のファイルを検索

指定したディレクトリ内で名前が "example.txt" のファイルを検索します。

find /path/to/search -name "example.txt"

2.特定のパーミッションを持つファイルを検索

指定したディレクトリ内でパーミッションが 644 のファイルを検索します。

find /path/to/search -perm 644

3.ファイルタイプで検索

指定したディレクトリ内でファイルのみを検索します。

find /path/to/search -type f

4.特定のユーザーが所有するファイルを検索

指定したディレクトリ内で所有者が username のファイルを検索します。

find /path/to/search -user username

5.特定のUIDを持つファイルを検索

指定したディレクトリ内で所有者のUIDが 1000 のファイルを検索します。

find /path/to/search -uid 1000

6.検索深度を制限して検索

 指定したディレクトリ内で検索深度を2階層までに制限して、名前が "example.txt" のファイルを検索します。

find /path/to/search -maxdepth 2 -name "example.txt"

7.一致するファイルの詳細情報を表示

指定したディレクトリ内で名前が "example.txt" のファイルの詳細情報を表示します。

find /path/to/search -name "example.txt" -ls

8.一致するファイルを削除

 指定したディレクトリ内で名前が "example.txt" のファイルを検索し、見つかったファイルを削除します。{} は一致したファイルのプレースホルダーで、\;-exec の終了を示します。

find /path/to/search -name "example.txt" -exec rm {} \;

 これらの例とオプションの組み合わせにより、findコマンドを使って多様な条件で効率的にファイルやディレクトリを検索し、操作することができます。

findコマンドの使用演習

事前準備

まず、演習を行うために事前準備を行います。

以下のコマンドを実行します。

# ファイルの作成
user01@ubuntu-vm:~$ touch file1
user01@ubuntu-vm:~$ touch file2
user01@ubuntu-vm:~$ touch file3

# パーミッションの変更
user01@ubuntu-vm:~$ chmod 644 file2
user01@ubuntu-vm:~$ chmod 777 file3

ファイルやディレクトリのアクセス権などの詳細情報を確認します。

・「ls -l」コマンドを実行します。

user01@ubuntu-vm:~$ ls -l
合計 36
-rw-rw-r-- 1 user01 user01    0  5月 17 00:37 file1
-rwxrwxrwx 1 user01 user01    0  5月 17 00:37 file2
-rw-rw-r-- 1 user01 user01    0  5月 17 00:37 file3
drwx------ 4 user01 user01 4096  5月  5 14:52 snap
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 ダウンロード
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 テンプレート
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 デスクトップ
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 ドキュメント
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 ビデオ
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 ピクチャ
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 ミュージック
drwxr-xr-x 2 user01 user01 4096  1月  1 10:51 公開

ユーザーIDを確認します。

・「id」コマンドを実行します。

user01@ubuntu-vm:~$ id
uid=1000(user01) gid=1000(user01) groups=1000(user01),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),135(lxd),136(sambashare)

1.特定の名前のファイルを検索

・「find /home/user01 -name "file1"」コマンドを実行します。

 指定したディレクトリ内で名前が "example.txt" のファイルを検索します。「"」でファイル名を囲まなくても検索できます。

user01@ubuntu-vm:~$ find /home/user01 -name "file1"
/home/user01/file1

# 「"」で囲まないでファイル名を指定
user01@ubuntu-vm:~$ find /home/user01 -name file1
/home/user01/file1

2.特定のパーミッションを持つファイルを検索

・「find /home/user01 -perm 644」コマンドを実行します。

指定したディレクトリ内でパーミッションが 644 のファイルを検索します。

user01@ubuntu-vm:~$ find /home/user01 -perm 644
/home/user01/file2
/home/user01/.cache/mesa_shader_cache/18/511d2df12ce4317e3448c5363ea9b926081674

(省略)
/home/user01/.bashrc
/home/user01/.config/gedit/accels

3.ファイルタイプで検索

・「find /home/user01 -type f」コマンドを実行します。

指定したディレクトリ内でファイルのみを検索します。

user01@ubuntu-vm:~$ find /home/user01 -type f
/home/user01/.vboxclient-seamless-tty2-control.pid
/home/user01/.vboxclient-seamless-tty2-service.pid
/home/user01/file2
(省略)
/home/user01/file1
(省略)
/home/user01/file3
(省略)
/home/user01/.vboxclient-vmsvga-session-tty2-control.pid
/home/user01/.bash_history

4.特定のユーザーが所有するファイルを検索

・「find /home/user01 -user user01」コマンドを実行します。

指定したディレクトリ内で所有者が「user01」のファイルを検索します。

user01@ubuntu-vm:~$ find /home/user01 -user user01
(省略)
/home/user01/.config/ibus-mozc-gnome-initial-setup-done
/home/user01/.config/user-dirs.dirs
/home/user01/.vboxclient-vmsvga-session-tty2-control.pid
/home/user01/.bash_history

5.特定のUIDを持つファイルを検索

・「find /home/user01 -uid 1000」コマンドを実行します。

指定したディレクトリ内で所有者のUIDが「1000」のファイルを検索します。

user01@ubuntu-vm:~$ find /home/user01 -uid 1000
(省略)
/home/user01/.config/ibus-mozc-gnome-initial-setup-done
/home/user01/.config/user-dirs.dirs
/home/user01/.vboxclient-vmsvga-session-tty2-control.pid
/home/user01/.bash_history

6.一致するファイルの詳細情報を表示

・「find /home/user01 -name file2 -ls」コマンドを実行します。

指定したディレクトリ内で名前が 「file2」のファイルの詳細情報を表示します。

user01@ubuntu-vm:~$ find /home/user01 -name file2 -ls
  1311209      0 -rwxrwxrwx   1 user01   user01          0  5月 17 00:37 /home/user01/file2

7.一致するファイルを削除

・「find /home/user01 -name file3 -exec rm {} \;」コマンドを実行し、「ls」コマンドで実行結果を確認します。

 指定したディレクトリ内で名前が 「file3」のファイルを検索し、見つかったファイルを削除します。{} は一致したファイルのプレースホルダーで、「\;」 で「-exec」 の終了を示します。

user01@ubuntu-vm:~$ find /home/user01 -name file3 -exec rm {} \;
user01@ubuntu-vm:~$ ls
file1  snap          テンプレート  ドキュメント  ピクチャ      公開
file2  ダウンロード  デスクトップ  ビデオ        ミュージック

8.作成したファイルの削除

この演習で作成したファイルを削除します。

・「rm file1 file2」コマンドを実行します。

user01@ubuntu-vm:~$ rm file1 file2
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック