写真提供:Qole Pejorian
ディレクトリ構造の下でファイルを検索する基本的な操作とは別に、find コマンドを使用していくつかの実用的な操作を実行することもできます。これにより、コマンド ラインの旅が簡単になります。
この記事では、Linux の find コマンドの 15 の実際的な例を確認します。これらは、初心者にも専門家にも非常に役立ちます。
まず、ホーム ディレクトリの下に次のサンプルの空のファイルを作成して、以下で説明する検索コマンドの例をいくつか試してください。
# 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 コマンドの基本的な使い方です。この例では、現在のディレクトリとそのすべてのサブディレクトリにある MyCProgram.c という名前のすべてのファイルを検索します。
# find -name "MyCProgram.c" ./backup/MyCProgram.c ./MyCProgram.c
2.名前を使用して大文字と小文字を区別せずにファイルを検索
これは、find コマンドの基本的な使い方です。この例では、現在のディレクトリとそのすべてのサブディレクトリで MyCProgram.c (大文字と小文字を区別しない) という名前のすべてのファイルを検索します。
# 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
passwd ファイルは root の 1 つ下のレベルにあります。 (つまり、ルート — レベル 1、および 1 つのサブディレクトリ — レベル 2)
# find -maxdepth 2 -name passwd ./etc/passwd
passwd ファイルは root から 2 つ下のレベルにあります。 (つまり、ルート — レベル 1、および 2 つのサブディレクトリ — レベル 2 と 3 )
# find / -maxdepth 3 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
サブディレクトリ レベル 2 と 4 の間でパスワード ファイルを見つけます。
# find -mindepth 3 -maxdepth 5 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd
4.検索コマンドで見つかったファイルに対してコマンドを実行します。
以下の例では、find コマンドは MyCProgram.c という名前のすべてのファイルの md5sum を計算します (大文字と小文字は区別されません)。 {} は現在のファイル名に置き換えられます。
# find -iname "MyCProgram.c" -exec md5sum {} \; d41d8cd98f00b204e9800998ecf8427e ./mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.c d41d8cd98f00b204e9800998ecf8427e ./MyCProgram.c
5.試合の逆転。
名前が MyCProgram.c ではないファイルまたはディレクトリを表示します。最大深度が 1 であるため、これは現在のディレクトリの下のみを検索します。
# find -maxdepth 1 -not -iname "MyCProgram.c" . ./MybashProgram.sh ./create_sample_files.sh ./backup ./Program.c
6. inode 番号でファイルを検索しています。
すべてのファイルには一意の inode 番号があり、それを使用してそのファイルを識別できます。類似した名前の 2 つのファイルを作成します。つまり、末尾にスペースがある 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
グループのみ読み取り権限のあるファイルを探す [8進数で検索]
# 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 つの小さなファイルを見つける
テクニックはより大きなファイルを見つけるのと同じですが、ソートの唯一の違いは昇順です。
# find . -type f -exec ls -s {} \; | sort -n | head -5
上記のコマンドでは、ほとんどの場合、ゼロ バイト ファイル (空のファイル) しか表示されません。したがって、次のコマンドを使用して、ゼロ バイト ファイル以外の小さいファイルを一覧表示できます。
# 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 コマンドは、normal_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 {} \;"
エイリアス rm100m を使用して、100M を超えるすべての *.tar ファイルを削除します (100M を削除)。同様の概念を使用して、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
検索コマンドの例の第 2 部
find コマンドに関するこのママの記事が気に入った場合は、find コマンドのパパの記事をチェックすることを忘れないでください — パパ、見つけました!、15 の素晴らしい Linux 検索コマンドの例 (パート 2)
すばらしい Linux 記事
以下は素晴らしい 15 の例です。 役に立つと思われる記事
- Linux コマンドラインの歴史をマスターするための 15 の例
- Unix LS コマンド:15 の実例
- Grep をつかもう! – 15 の実用的な grep コマンドの例
- Linux Crontab:15 の素晴らしい Cron ジョブの例