blog

15 Linuxの便利なfindコマンドの例

ディレクトリ構造内のファイルを見つけるという基本的な操作に加えて、findコマンドを使って、コマンドラインの旅をより簡単にする実用的な操作を実装することもできます。この記事では、初心者にもベテランにも...

Jul 4, 2025 · 10 min. read
シェア

ディレクトリ構造内のファイルを探すという基本的なことに加えて、findコマンドを使えば、コマンドラインに行くのがさらに簡単になるような便利な操作をいくつも実行することができます。

この記事では、初心者にもベテランにも便利な15のLinux findコマンドを紹介します。

まず、以下のサンプルfindコマンドをテストするために、ホームディレクトリの下に以下の空のファイルを作成します。

# vim create_sample_files.sh 
touch MybashProgram.sh 
touch mycprogram.c 
touch MyCProgram.c 
touch Program.c 
mkdir backup 
cd backup 
touch MybashProgram.sh 
touch mycprogram.c 
touch MyCProgram.c 
touch Program.c 
# chmod +x create_sample_files.sh 
# ./create_sample_files.sh 
# ls -R 
.: 
backup                  MybashProgram.sh  MyCProgram.c 
create_sample_files.sh  mycprogram.c      Program.c 
./backup: 
MybashProgram.sh  mycprogram.c  MyCProgram.c  Program.c 

1.ファイル名で探す

これはfindコマンドの基本的な使い方です。次の例では、find名としてMyCProgram.cを使用して、カレント・ディレクトリとそのサブ・ディレクトリにあるファイルを検索しています。

# find -name "MyCProgram.c" 
./backup/MyCProgram.c 
./MyCProgram.c 

2.大文字小文字を無視してファイル名でファイルを検索します。

これはfindコマンドの基本的な使い方です。次の例では、MyCProgram.cをfind名として、大文字小文字を無視して、カレントディレクトリとそのサブディレクトリにあるファイルを検索しています。

# find -iname "MyCProgram.c" 
./mycprogram.c 
./backup/mycprogram.c 
./backup/MyCProgram.c 
./MyCProgram.c 

3.mindepthとmaxdepthを使用して、検索の深さを指定したディレクトリに制限します。

ルート・ディレクトリとそのサブディレクトリでpasswdファイルを探してください。

# find / -name passwd 
./usr/share/doc/nss_ldap-253/pam.d/passwd 
./usr/bin/passwd 
./etc/pam.d/passwd 
./etc/passwd 

ルート・ディレクトリとその1階層下のサブディレク トリからpasswdを探してください。

# find -maxdepth 2 -name passwd 
./etc/passwd 

ルート・ディレクトリーとそのサブディレクトリー *** 2階層にあるpasswdファイルを探してください。

# find / -maxdepth 3 -name passwd 
./usr/bin/passwd 
./etc/pam.d/passwd 
./etc/passwd 

第2階層サブディレクトリと第4階層サブディレクトリの間にある passwdファイルを探してください。

# find -mindepth 3 -maxdepth 5 -name passwd 
./usr/bin/passwd 
./etc/pam.d/passwd 

4.findコマンドで見つかったファイルに対してコマンドを実行します。

次の例では、findコマンドで「MyCProgram.c」という名前の大文字小文字を区別しないすべてのファイルのMD5検証合計を計算しています。は現在のファイル名に置き換えられます。

find -iname "MyCProgram.c" -exec md5sum {} \; 
d41d8cd98f00b204e9800998ecf8427e  ./mycprogram.c 
d41d8cd98f00b204e9800998ecf8427e  ./backup/mycprogram.c 
d41d8cd98f00b204e9800998ecf8427e  ./backup/MyCProgram.c 
d41d8cd98f00b204e9800998ecf8427e  ./MyCProgram.c 

5.逆マッチング

MyCProgram.c 以外の名前のファイルまたはディレクトリをすべて表示します。maxdepthが1なので、カレント・ディレクトリ内のファイルとディレクトリのみが表示されます。

find -maxdepth 1 -not -iname "MyCProgram.c" 
. 
./MybashProgram.sh 
./create_sample_files.sh 
./backup 
./Program.c 

6.inode番号を使ったファイルの検索

どのファイルにも *** inode 番号があり、それを使ってファイルを区別することができます。似たような名前のファイルを2つ作成します。例えば、1つは末尾にスペースがあり、もう1つはスペースがありません。

touch "test-file-name" 
# touch "test-file-name " 
[Note: There is a space at the end] 
# ls -1 test* 
test-file-name 
test-file-name 

lsの出力から、どのファイルの末尾がスペースであるかを見分けることはできません。iオプションを付けると、ファイルのinode番号が表示され、2つのファイルを区別することができます。

ls -i1 test* 
16187429 test-file-name 
16187430 test-file-name 

以下のように、findコマンドでinode番号を指定することができます。ここでは、findコマンドはinode番号でファイル名を変更しています。

find -inum 16187430 -exec mv {} new-test-file-name \; 
# ls -i1 *test* 
16187430 new-test-file-name 
16187429 test-file-name 

このテクニックは、上のようなひどい名前のファイルをどうにかしたいときに使えます。例えば、file?.txtという名前のファイルには特殊文字が含まれています。rm file?.txt "と実行しようとすると、下に表示されている3つのファイルがすべて削除されてしまいます。そこで、以下の手順で「file?.txt」ファイルを削除してください。

ls 
file1.txt  file2.txt  file?.txt 

各ファイルのinode番号を検索します。

ls -i1 
804178 file1.txt 
804179 file2.txt 
804180 file?.txt 

以下に示すように、inode番号を使用して、特殊記号を含むファイル名を削除します。

find -inum 804180 -exec rm {} \; 
# ls 
file1.txt  file2.txt 
[Note: The file with name "file?.txt" is now removed] 

7.パーミッションに従ったファイルの検索

以下の操作が合理的です:

指定したパーミッションのファイルを検索

他のパーミッションビットを無視し、指定されたパーミッションと一致するかどうかをチェックします。

指定された8進数/記号式に基づく権限の検索

この例では、ディレクトリに以下のファイルがあるとします。これらのファイルはパーミッションが異なることに注意してください。

ls -l 
total 0 
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all 
-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read 
---------- 1 root root 0 2009-02-19 20:31 no_for_all 
-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file 
-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read 
----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read 

グループの読み取りパーミッションを持つファイルを検索します。次のコマンドを使用して、同じグループのユーザーに対して読み取りパーミッションが設定されている、カレントディレクトリ内のファイルを検索します。

find . -perm -g=r -type f -exec ls -l {} \; 
-rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read 
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all 
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read 
-rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read 

グループユーザーに対して読み取り専用パーミッションが設定されているファイルを検索します。

find . -perm g=r -type f -exec ls -l {} \; 
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read 

グループユーザーに対して読み取り専用パーミッションが設定されているファイルを検索します。

find . -perm 040 -type f -exec ls -l {} \; 
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read 

8.ホームディレクトリとサブディレクトリ内のすべての空のファイルを検索します。

以下のコマンドの出力ファイルの大部分は、ファイルボックスをロックする他のプログラムによって作成されたプレースホルダーです。

find ~ -empty 

ホームディレクトリにある空のファイルだけをリストアップします。

find . -maxdepth 1 -empty 

現在の年のディレクトリにある、隠されていない空のファイルだけがリストされます。

find . -maxdepth 1 -empty -not -name ".*" 

9.5つの***文書を検索

次のコマンドは、カレント・ディレクトリとサブディレクトリにある5つの***ファ イルを一覧表示します。このコマンドの処理に必要なファイルの数に応じて、少し時間がかかります。

find . -type f -exec ls -s {} \; | sort -n -r | head -5 

10.最小の5つのファイルを検索

この方法は、5つの***ファイルを見つける方法と似ていますが、ソートの順序が降順である点が異なります。

find . -type f -exec ls -s {} \; | sort -n  | head -5 

上記のコマンドでは、空のファイルしか表示されない可能性が高いです。そのような場合は、以下のコマンドを使用すると、0バイトのファイルではなく、最小のファイルを一覧表示することができます。

find . -not -empty -type f -exec ls -s {} \; | sort -n  | head -5 

11.指定したファイル・タイプのファイルを検索するには、-typeを使用します。

ソケットファイルのみを検索します:

find . -type s 

すべてのディレクトリを検索します:

find . -type d 

すべての一般文書を検索します:

find . -type f 

すべての隠しファイルを検索します:

find . -type f -name ".*" 

すべての隠しディレクトリを検索します:

find -type d -name ".*" 

12.他の文書との修正時間の比較による文書の検索

指定したファイルの後に変更が加えられたファイルを表示します。次の find コマンドは ordinary_file より後に作成されたすべてのファイルを表示します。

ls -lrt 
total 0 
-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read 
----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read 
-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file 
-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read 
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all 
---------- 1 root root 0 2009-02-19 20:31 no_for_all 
# find -newer ordinary_file 
. 
./everybody_read 
./all_for_all 
./no_for_all 

13.サイズによるファイルの検索

ファイルをサイズで検索するには、-size オプションを使用します。

指定したファイルより大きいファイルを検索します:

find ~ -size +100M 

指定されたファイルより小さいファイルを検索します:

find ~ -size -100M 

指定されたサイズに一致するファイルを検索します:

find ~ -size 100M 

注:-は指定サイズより小さく、+は指定サイズより大きいことを意味します。記号なしは、指定されたサイズとまったく同じサイズであることを意味します。

14.一般的な検索操作のエイリアシング

便利なものを見つけたら、別名をつけることができます。そして、お好きなところに実装してください。

a.outファイルの削除によく使われます。

alias rmao="find . -iname a.out -exec rm {} \;" 
# rmao 

cプログラムによって生成されたコアファイルを削除します。

alias rmc="find . -iname core -exec rm {} \;" 
# rmc 

15.findコマンドによる大きなパッケージの削除

次のコマンドは、100M以上の*.zipファイルを削除します。

find / -type f -name *.zip -size +100M -exec rm -i {} \;" 

100Mより大きい*.tarファイルをすべて削除するには、rm100mエイリアスを使用します。同じアイデアを使って、rm1g、rm2g、rm5gというエイリアスのクラスを作成し、1G、2G、5Gより大きいファイルをすべて削除することができます。

alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;" 
# alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;" 
# alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;" 
# alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;" 
# rm100m 
# rm1g 
# rm2g 
# rm5g 

検索コマンドの例

findコマンドに関するママの記事を楽しんでいただけたなら、findコマンドに関するパパの記事のパート2をチェックするのをお忘れなく。

Read next

SDN: 着地後の熱狂にどう立ち向かうか?

2013年、ネットワーク業界全体がある言葉に取り囲まれています。それはSDNです。もしあなたがこの時代にSDNの話をしないのであれば、企業の将来の発展はSDN戦略を含むことができないのであれば、それは時代遅れのパフォーマンスであることが当然とみなされるでしょう。過去の2013年のネットワーキング業界は、SDNのためのこの過度の熱狂の後、ブランドの新しい2014年にどのようにそれの現実に直面するのですか?

Jul 4, 2025 · 5 min read