ディレクトリ構造内のファイルの検索などの基本的な操作に加えて、find コマンドを使用していくつかの実用的な操作を実行し、コマンド ラインでの作業を容易にすることもできます。
この記事では、初心者とベテランの両方に非常に役立つ15のLinux findコマンドを紹介します。
まず、ホーム ディレクトリに次の空のファイルを作成し、以下の find コマンドの例をテストします。
01 # vim create_sample_files.sh
02 touch MybashProgram.sh
03 touch mycprogram.c
04 touch MyCProgram.c
05 touch Program.c
06
07 mkdir バックアップ
08 CDバックアップ
09
10 touch MybashProgram.sh
11 touch mycprogram.c
12 touch MyCProgram.c
13 touch Program.c
14
15 # chmod +x create_sample_files.sh
16
17 # ./create_sample_files.sh
18
19 # ls -R
20 .:
21 バックアップ MybashProgram.sh MyCProgram.c
22 作成_sample_files.sh mycprogram.c Program.c
23
24 ./backup:
25 MybashProgram.sh mycprogram.c MyCProgram.c Program.c
1. ファイル名でファイルを検索する
findコマンドの基本的な使い方です。次の例は、MyCProgram.c を検索名として使用して、現在のディレクトリとそのサブディレクトリ内のファイルを検索する方法を示しています。
1 # find -name "MyCProgram.c"
2 ./backup/MyCProgram.c
3 ./MyCProgram.c
2. 大文字と小文字を区別せずにファイル名を使用してファイルを検索します
これはfindコマンド 基本的な使い方。次の例は、検索名として MyCProgram.c を使用し、大文字と小文字を区別せずに、現在のディレクトリとそのサブディレクトリでファイルを検索する方法を示しています。
1 # -iname "MyCProgram.c" を検索します
2 ./mycprogram.c
3 ./backup/mycprogram.c
4 ./backup/MyCProgram.c
5 ./MyCProgram.c
3. min Depth と max Depth を使用して、指定したディレクトリの検索の深さを制限します
ルート ディレクトリとそのサブディレクトリで passwd ファイルを見つけます。
1 # find / -name passwd
2 ./usr/share/doc/nss_ldap-253/pam.d/passwd
3 ./usr/bin/passwd
4 ./etc/pam.d/ passwd
5 ./etc/passwd
ルート ディレクトリとその 1 レベルの深さのサブディレクトリで passwd を検索します (たとえば、ルート - レベル 1、および 1 つのサブディレクトリ - レベル 2)
1 # find - max Depth 2 -name passwd
2 ./etc/passwd
ルート ディレクトリとその 2 レベルまでのサブディレクトリで passwd ファイルを検索します (たとえば、ルート - レベル 1、および 2 つのサブディレクトリ - レベル 2 と 2 つのサブディレクトリ)。 3)
/1# Find/-maxDepth 3 -Name Passwd 2 ./usr/bin/passwd 3. ./etc/pam.d/passwd 4.etc/passwd passwd を探しますファイルは第 4 レベルのサブディレクトリ内にあります。 1 # find -min Depth 3 -max Depth 5 -name passwd 2 ./usr/bin/passwd 3 ./etc/pam.d/passwd 4. find で見つかったファイルに対してコマンドを実行します。コマンド 次の例は、「MyCProgram.c」という名前の大文字と小文字を区別しないすべてのファイルの MD5 検証済みの合計を計算する find コマンドを示しています。 {} は現在のファイル名に置き換えられます。 1 find -iname "MyCProgram.c" -exec md5sum {} ; 2 d41d8cd98f00b204e9800998ecf8427e ./mycprogram.c 3 d41d8cd98f 00b204e9800998ecf8427e ./backup/mycprogram.c 4 d41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.c5 d41d8cd98f00b204e9800998ecf8427e ./MyCProgram.c 5. 逆に、 と一致すると、名前が MyCProgram.c ではないすべてのファイルまたはディレクトリが表示されます。 max Depth が 1 なので、現在のディレクトリ内のファイルとディレクトリのみが表示されます。 1 -max Depth 1 -not -iname "MyCProgram.c" を見つけます
2 .
3 ./MybashProgram.sh
4 ./create_sample_files.sh
5 ./backup
6 ./Program.c
6. i ノード番号を使用してファイルを検索します
すべてのファイルには一意のファイルを区別できる i ノード番号。類似した名前の 2 つのファイルを作成します。たとえば、1 つは末尾にスペースがあり、もう 1 つは末尾にスペースがありません。
1 touch "テストファイル名"
2
3 # touch "テストファイル名"
4 [注: 最後にスペースがあります]
5
6 # ls -1 test*
7 テストファイル名
8 テストファイル名
ls の出力からはどのファイルの末尾がスペースなのか区別できません。オプション -i を使用すると、ファイルの i ノード番号が表示されるため、2 つのファイルを区別できます。
1 ls -i1 test*
2 16187429 テストファイル名
3 16187430 テストファイル名
find コマンドでは以下のように i ノード番号を指定できます。ここで、find コマンドは、inode 番号を使用してファイルの名前を変更します。
1 find -inum 16187430 -exec mv {} 新しいテストファイル名 ;
2
3 # ls -i1 *test*
4 16187430 新しいテストファイル名
5 16187429 test- file-name
この手法は、上記のような不適切な名前のファイルに対して何かを実行したい場合に使用できます。たとえば、file?.txt という名前のファイルの名前には特殊文字が含まれています。 「rm file?.txt」を実行すると、以下の3つのファイルがすべて削除されます。そのため、以下の手順に従って「file?.txt」ファイルを削除してください。
1 ls
2 file1.txt file2.txt file?.txt
各ファイルの i ノード番号を見つけます。
1 ls -i1
2 804178 file1.txt
3 804179 file2.txt
4 804180 file?.txt 以下に示すように: i ノード番号を使用して、特殊記号を含むファイル名を削除します。
1 find -inum 804180 -exec rm {} ;
2
3 # ls
4 file1.txt file2.txt
5 [注: 「file?.txt」という名前のファイルは削除されました]
7. ファイルのアクセス許可に基づいてファイルを検索する
次の操作が適切です:
指定されたアクセス許可を持つファイルを検索する
他のアクセス許可ビットを無視し、指定されたアクセス許可に一致するかどうかを確認する
指定された 8 進数/記号に従って表現される アクセス許可の検索
この例では、ディレクトリに次のファイルが含まれていると仮定します。これらのファイルには異なる権限があることに注意してください。
1 ls -l
2 total 0
3 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
4 -rw-r--r-- 1 root root 0 2009-02-19 20:30Everyone_read
5 -------- 1 root root 0 2009-02-19 20:31 no_for_all
6 -rw------- 1 root root 0 2009-02- 19 20 :29ordinary_file
7 -rw-r----- 1 root root 0 2009-02-19 20:27 Others_can_ also_read
8 ----r----- 1 root root 0 2009-02 -19 20:27 Others_can_only_read
グループ読み取り権限を持つファイルを検索します。次のコマンドを使用して、ファイルに対する他の権限を無視して、同じグループ内のユーザーに読み取り権限を持つファイルを現在のディレクトリで検索します。
1 find . -perm -g=r -type f -exec ls -l {} ;
2 -rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read
3 -rwxrwxrwx 1 ルート root 0 2009-02-19 20:31 ./all_for_all
4 ----r----- 1 ルート root 0 2009-02-19 20:27 ./others_can_only_read
5 -rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
グループ ユーザーの読み取り専用権限を持つファイルを検索します。
1 find . -perm g=r -type f -exec ls -l {} ;
2 ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
グループ ユーザーに対して読み取り専用権限を持つファイルを検索します (8 進数の権限フォームを使用)。
1 find . -perm 040 -type f -exec ls -l {} ;
2 ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
8 . ホームディレクトリとサブディレクトリ内の空のファイル (0 バイトのファイル) をすべて検索します
次のコマンドの出力ファイルのほとんどは、ロックされたファイルと他のプログラムによって作成された配置ファイルです
1 find ~ -empty
ホーム ディレクトリ内の空のファイルのみを一覧表示します。
1 find . -max Depth 1 -empty
現在のディレクトリ内の非表示ではない空のファイルのみをリストします。
1 find . -max Depth 1 -empty -not -name ".*"
9. 最大の 5 つのファイルを検索します
次のコマンドは、現在のディレクトリとサブディレクトリ内の最大の 5 つのファイルをリストします。コマンドで処理する必要があるファイルの数に応じて、これにはしばらく時間がかかります。
1 find . -type f -exec ls -s {} ; sort -n -r head -5
10 最も小さいファイルを 5 つ見つける方法と似ています。ファイルの唯一の違いは、ソート順序が降順であることです。
1 find . -type f -exec ls -s {} ; sort -n | head -5
上記のコマンドでは、空のファイル (0 バイトのファイル) のみが表示される可能性があります。したがって、次のコマンドを使用すると、0 バイトのファイルの代わりに最小のファイルを一覧表示できます。
1 find . -not -empty -type f -exec ls -s {} | sort -n head -5
11. 指定されたファイルタイプのファイルを検索します
1 find . -type s
すべてのディレクトリを検索
1 find . -type f
すべての隠しファイルを検索
1 find . *"
すべての隠しディレクトリを検索します
1 find -type d -name ".*"
12. 変更時間を他のファイルと比較してファイルを検索します
指定されたファイル以降に変更されたファイルを表示します。以下の find コマンドは、normal_file の後に作成および変更されたすべてのファイルを表示します。
01 ls -lrt
02 total 0
03 -rw-r----- 1 root root 0 2009-02-19 20:27 Others_can_only_read
04 ----r----- 1 root root 0 2009-02-19 20:27 Others_can_only_read
05 -rw------- 1 root root 0 2009-02-19 20:29ordinary_file
06 -rw-r--r-- 1 root root 0 2009-02-19 20:30Everyone_read
07 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
08 -------- 1 root root 0 2009-02 -19 20:31 no_for_all
09
10 # find -newerordinary_file
11 ./everybody_read
13 ./all_for_all
14 ./no_for_all
13.ファイル サイズでファイルを検索します
サイズでファイルを検索する -size オプション。
指定されたファイルより大きいファイルを検索します
1 Find ~ -size +100M 指定されたファイルより小さいファイルを検索します
1 find ~ -size -100M 指定されたサイズに一致するファイルを検索します
1 find ~ -size 100M
注: – は指定されたサイズより小さいことを意味し、+ は指定されたサイズより大きいことを意味します。指定されたサイズとまったく同じサイズを示す記号はありません。
14. よく使用される検索操作にエイリアスを与えます
便利なものを見つけたら、それにエイリアスを与えることができます。そして、好きな場所で実行してください。
通常、a.out ファイルを削除するために使用されます。
1 alias rmao="find . -iname a.out -exec rm {} ;"
2 # rmao
C プログラムによって生成されたコア ファイルを削除します。
1 alias rmc="find . -iname core -exec rm {} ;"
2 # rmc
15. find コマンドを使用して、大きなパッケージ ファイルを削除します
次のコマンドは、100M を超える *.zip ファイルを削除します。
1 Find / -type f -name *.zip -size +100M -exec rm -i {} ;"
エイリアス rm100m を使用して、すべての豪雨 100M *.tar ファイルを削除します。同じアイデアを使用して rm1g を作成します、 rm2g 、1G、2G、5G を超えるすべてのファイルを削除する rm5g のカテゴリ名
1 alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {};"
2 # エイリアス rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} ;" 3 # alias rm2g="find / -type f -name *.tar -size + 2G -exec rm -i {} ;" 4 # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} ;" 5 6 # rm100m7 # rm1g
8 # rm2g
9 # rm5g
Find コマンド例 (パート 2)
15 個の実用的な Linux find コマンド例と関連記事については、PHP 中国語 Web サイトに注目してください。