テクノロジー LINUX Linux の Find コマンドのベスト 40 例

Linux の Find コマンドのベスト 40 例

Linux の find コマンドは、システム管理者が幅広い検索基準に基づいてファイルやディレクトリを見つけて管理できる強力なツールです。名前、タイプまたは拡張子、サイズ、権限などによってディレクトリとファイルを検索できます。

ファイルやディレクトリを検索するだけでなく、 find コマンドを他のコマンドと組み合わせることで、結果に対してアクションを実行することもできます。 -exec オプションを追加すると、システム管理者は外部コマンドを実行し、サイズや名前などの指定された基準に一致するファイルのコピー、移動、削除、アクセス許可の変更などのアクションを実行できるようになります。

この記事では、基本的な Linux の find コマンドを例を挙げて説明します。ここでは、ファイルとディレクトリを検索する方法を説明します。次に、 -exec オプションを使用して、サイズや権限などに基づいてファイルまたはディレクトリを操作する方法を説明します。

find コマンドの一般的な構文は次のとおりです。

 find {path} {name -of-file or dir-to-search} {action-to-take}

どこ、

  • path ディレクトリを指定します。
  • name-of file or dir-to-search : 検索するファイルまたはディレクトリの名前
  • action-to-take : コピー、削除、移動など。

このチュートリアルでは、指定されたパターンに一致するファイルとディレクトリを見つける方法を説明します。また、find コマンドが見つけたファイルまたはディレクトリに対してアクションを実行する方法についても説明します。このガイドは Ubuntu に基づいていますが、ほとんどの Linux ディストリビューションとバージョンに適用できます。

コンテンツ 表示

ファイルとディレクトリの検索

Linux の Find コマンドのベスト 40 例
Linux の Find コマンドのベスト 40 例

名前または拡張子で特定のファイルを検索する

特定のファイルを検索するには、ルート (/) から次のコマンドを実行します。このコマンドには、検索しているファイルの正確な名前が含まれています。

 find . -name file22.txt

出力

./test/file22.txt
./sales/file22.txt

結果にはパスが含まれることに注意してください。これは、ファイルがあるディレクトリがわからない場合、またはファイルが複数の場所にある場合に重要です。

現在の場所にあるまま、別のディレクトリでファイルを検索することもできます。この場合、検索するディレクトリのパスを指定する必要があります。

 find ./test -name file22.txt
Linux の Find コマンドのベスト 40 例
Linux の Find コマンドのベスト 40 例

別のディレクトリで特定のファイルを探しています

私たちの場合は、test ディレクトリ内のレター ファイル から始まるすべてのファイルを検索します。

 find ./test -name file*

出力

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc
Linux の Find コマンドのベスト 40 例
Linux の Find コマンドのベスト 40 例

拡張子でファイルを検索する

Linux で特定の拡張子を持つファイルを検索するには、それをコマンドに追加します。

 find . -name *.txt

出力

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt
Linux の Find コマンドのベスト 40 例
Linux の Find コマンドのベスト 40 例

ファイルとディレクトリを名前で検索する

以下のコマンドを使用して、 qa という文字で始まるファイルとディレクトリを検索します。私たちのコンピュータには、 qatree.txt および qa.txt ファイルと、 qa という名前のディレクトリがあります。

コマンドを実行すると、

 find ./ -name "qa*"

次の出力が返されます

./test/qatree.pdf
./test/qa.txt
./home/qa

このコマンドは、検索条件に一致するファイルとディレクトリの両方を返します。ファイルまたはディレクトリのみを検索するには、コマンドでこれを指定する必要があります。

Linux の Find コマンドのベスト 40 例
Linux の Find コマンドのベスト 40 例

ファイルまたはディレクトリのみを検索する

ファイルの場合のみ、 type f スイッチを使用します。

ファイルのみ

find ./ -type f -name "qa*"

出力

./test/qatree.pdf
./test/qa.txt

ディレクトリのみ

ディレクトリのみを検索するには、 type d オプションを追加します。

 find ./ -type d -name "qa*"

出力

./home/qa

大文字と小文字を区別しない検索コマンド

-name スイッチを使用したすべての検索では大文字と小文字が区別され、大文字の結果は得られません。すべてのケースを取得するには、 -iname オプションを使用します。

 find ./ -iname "qa*"

出力

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

複数のディレクトリからファイルを検索する

別のディレクトリでファイルを検索するには、コマンドにパスを追加します。この例では、 test numeric ディレクトリをチェックインします。

 find ./test ./numeric -name file22.txt -type f

出力

./test/file22.txt
/root/numeric/file22.txt

すべてのディレクトリから異なる拡張子を持つ複数のファイルを検索します

find コマンドを使用すると、 *.doc *.txt *.pdf などの異なる拡張子を共有する複数のファイルを見つけることができます。これは、一度に 1 つの拡張子ずつ個別に行うことも、すべての拡張子を含む 1 つのコマンドを使用することもできます。必要な拡張子。

find . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )

出力

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

特定のテキストを含むファイルを検索する

特定のテキストを含むファイルにアクセスしたいが、そのファイル名や場所を思い出せない場合があります。このコマンドを使用すると、ターゲット テキストを含むすべてのファイルを検索できます。

「hyperconvergence」という単語を含むすべてのファイルを検索するには、次を使用します。

 find / -type f -exec grep -l -i "hyperconvergence" {} ;

出力

/root/numeric/hci
/root/HCIP

–i オプションを使用すると、コマンドで大文字と小文字が区別されず、大文字かどうかに関係なくテキストが検索されます (例: hyperconvergence 、 Hyperconvergence など)。

特定のディレクトリ内のファイルを検索するには、単にそれらのファイルをコマンドに追加します。

 find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

出力

./numeric/hci

grep コマンドの例をさらに詳しく見てみましょう。

サイズに基づいてファイルとディレクトリを検索する

特定のサイズ以下、特定の範囲内、または空のすべてのファイルまたはディレクトリを検索できます。検索するファイルまたはディレクトリの種類に応じて、適切なサイズ形式を使用してください。

サイズオプションには以下が含まれます。

c – バイト

k – キロバイト

M – メガバイト

G – ギガバイト

特定のサイズのファイルを検索します (30MB に相当)

検索するには 30MB のファイルをすべて検索します

find / -size 30M

指定したサイズより大きいファイルを検索する

find -size +2M

出力

. /Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

現在のディレクトリで 10MB 未満のファイルを検索する

find . -type f -size -10M

サイズが 100 ~ 200MB のファイルを検索する

100~200MBなど特定の範囲内のファイルを探す場合

find / -size +100M -size -200M

20kbを超えるディレクトリを探します

find / -type d -size +20k

空のファイルとディレクトリを見つけます。

ファイル

find ./ -type f -size 0

または

find ./ -type f –empty

ディレクトリ

find ./ -type d –empty

経過時間または変更時刻でファイルを検索する

n 日より古いファイルを検索する

find /path/ -type f -name '*.txt' -mtime +8

-mtime +8 8 日より古い txt ファイルを検索します。

変更日順

これにより、過去 17 時間以内に変更されたファイルが検索されます

find . -mtime -17 -type f 

過去 10 日以内に変更されたディレクトリを探します

find . -mtime -10 -type d 

アクセスまたは変更に基づいてファイルを検索する

アクセスした日付または時刻に基づいてファイルを検索します。これにより、指定した期間内にアクセスされたファイルまたはアクセスされていないファイルを確認できます。

ホーム ディレクトリ内で過去 10 日間アクセスされていないファイルを表示します。

 find /home -atime +10

ちょうど 10 日前にアクセスされたファイル

find /home -atime 10

過去 10 日以内にアクセスされた

find /home -atime -10

過去 n 日以内に変更されたファイルを検索する

次のコマンドを使用して、過去 10 日以内に変更された /home ディレクトリ内のファイルを検索することもできます。

 find /home -mtime -10 

特定の期間内に変更されたファイルを検索します。

たとえば、ホーム ディレクトリ内の 6 ~ 15 日前に変更されたすべてのファイルです。

 find /home -type f -mtime +6 -mtime -15

過去 10 分間にアクセスされたファイルとディレクトリ

過去 10 分間にアクセスされたファイルを検索するには、-amin オプションを使用します。

 find . -amin -10 -type f

出力

./.bash_history
./.profileroot@ubuntu1804:~#

過去 10 分間にアクセスされたディレクトリ

find . -amin -10 -type d

特定の権限に一致するファイルを検索する

構文

$ find -perm mode

ここで、 mode は 644, 655, 700, 777 などの数値、または u=x, a=r+x, 文字のいずれかの権限です。

モードは次の 3 つの異なる方法で指定できます。

  1. 指定された正確なアクセス許可を持つファイルを検索する場合は、接頭辞を付けません。
  2. 少なくとも指定された権限を持つファイルには「 - 」が付きます。これにより、指定されたアクセス許可と追加のより高いアクセス許可を持つファイルが返されます。
  3. / 」を使用するには、ファイルに対するアクセス許可を持つ所有者またはグループを指定する必要があります。

権限 777 でファイルを検索する

find -perm 777

出力

./file1

少なくとも 766 のファイルを検索する
検索-パーマ-766

出力

./file2
./file1

このコマンドは、

  • ファイル所有者には読み取り/書き込み/実行権限があります。
  • グループには読み取り/書き込み権限があります
  • 他の人は読み取り/書き込み権限を持っています

そのため、この基準を満たす 2 つのファイル (file1 と file2) が返されます。ファイルには正確な 766 アクセス許可が必要ではなく、追加のアクセス許可も含めることができますが、少なくとも指定されたアクセス許可が必要です。

所有者が書き込み可能なファイルを検索する

ここで、「 / 」を使用して、所有者、グループ、またはその他のユーザーが書き込み可能なファイルを検索します。

 find -perm /222
.
./file2
./file3
./file1

上記の例では、所有者またはグループが書き込み可能なファイルを検索します。
これにより、どちらかで書き込み可能なファイルが返されますが、両方で書き込み可能である必要はありません。両方に書き込み権限があるファイルを表示するには、- 接頭辞を使用します。

 find -perm -220

出力

./file2
./file1

ユーザーが所有するファイルを検索する

Jack が所有するすべてのファイルを検索する

find /home -user jack

出力

/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi

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

Jack が所有するすべてのテキスト ファイルを検索する

find /home -user jack -iname "*.txt"

出力

/home/jack/docs/file32.txt

ファイルとディレクトリを検索し、その権限とともにリストします。

 find -name "*.conf" | ls -l

出力

total 120
drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
-rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
-rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

結果を見つけてそれに基づいて行動する

このセクションでは、find コマンドで指定されたパターンに一致するファイルに対してどのように対処できるかを見ていきます。

ファイルを検索して権限を変更する

特定のファイルタイプの権限を検索して変更します。この例では、以下に示すように、異なる権限を持つ PHP ファイルを操作します。

 jack@ubuntu1804:~/ver$ ls -la

total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

次に、すべての PHP ファイル (上記) を検索し、そのアクセス許可を 755 に置き換えます。

 find ver -name "*.php" -type f -exec chmod 755 {} ;

このコマンドは、 ver ディレクトリで PHP ファイルを検索し、そのアクセス許可を 755 ( rwxr-xr-x ) に設定します。

結果

jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

ファイルとディレクトリのアクセス許可を検索して変更する

644 のアクセス許可を持つファイルを検索し、655 のアクセス許可を持つように変更します。

 find . -type f -perm 644 -exec chmod 655 {} ;

また、644 のアクセス許可を持つディレクトリを検索し、これを 755 に置き換えることもできます。

 find . -type d -perm 644

出力

./docs   

docs フォルダーには 644 のアクセス許可があります

drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

755 に設定するには、次のコマンドを実行します。

 find . -type d -perm 644 -exec chmod 755 {} ;

これで、 755 正確に何なのかをもう一度確認できるようになりました。

 find . -type d -perm 755

出力

./docs

上から、root ディレクトリと docs ディレクトリに 755 のアクセス許可があることがわかります。

Ls –la コマンドにより、次の詳細が得られます。

 drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

ファイルまたはディレクトリを検索してコピーする

特定のファイルを検索してディレクトリにコピーする

以下のコマンドは、 file22.tx t ファイルを見つけて、 ~/tmp/images ディレクトリにコピーします。

 find -iname file22.txt -exec cp {} ~/tmp/images ;

1 種類のファイルを検索してディレクトリにコピーする

現在のディレクトリで拡張子が jpg の画像などのファイルを検索し、画像フォルダーなどの別の場所にコピーするには、次を使用します。

 find -iname '*.jpg' -exec cp {} ~/tmp/images ;

これにより、すべての jpg ファイルが検索され、 ~/tmp/images フォルダーにコピーされます。

1 つのファイルを検索して複数のディレクトリにコピーする

単一のディレクトリを検索して複数のディレクトリにコピーします。

 find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

これにより、 hci ファイルが検索され、 /tmp/dir1/ /tmp/dir2/ および $HOME/3/ の 3 つのディレクトリにコピーされます。

ファイルを検索して別のディレクトリに移動する

既知のファイルをディレクトリから別のディレクトリに移動すること。 universal.php ファイルを移動するには;

 find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

特定の拡張子を持つファイルを検索して別のフォルダーに移動します

find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

特定のファイルを見つけて、特定の別のフォルダーに移動する

find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

このコマンドは、名前が uni で始まり、任意の拡張子を持つすべてのファイルを検索します。次に、それらをディレクトリ /unifiles/ に移動します。

経過時間に基づいてファイルを検索して移動する

指定した日数より古いファイルを検索し、アーカイブなどの別の場所に移動します。

 find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

これにより、20 日より古い PDF ファイルが検索され、backup1 ディレクトリに移動されます。

ファイルとディレクトリを検索して削除する

現在のディレクトリ内のファイルまたはディレクトリを検索して削除するための構文は次のとおりです。

find . -type f -name "file to delete" -exec rm -f {} ; ファイルのみを削除するか、

find . -type d -name "dir-to-delete" -exec rm -rf {} ; ディレクトリのみを削除するには

特定のファイルのみを検索して削除する

til で始まるファイルを検索して削除するには、次を使用します。

 find . -type f -name "til*" -exec rm {} ; 

til で始まるディレクトリを検索して削除するには

find . -type d -name "til*" -exec rm {} ;

ファイルとディレクトリの両方を削除します

find . -name "til*" -exec rm -rf {} ; 

これにより、til の文字で始まるファイルとディレクトリの両方が削除されます。

拡張子で削除

以下は、現在のディレクトリ内のすべての txt ファイルを見つけて削除する方法です。 txt を、 bak pdf など、削除したい別の拡張子に置き換えます。

 find . -type f -name "*.txt" -exec rm -f {} ;

各ファイルを削除する前にシステムに確認を求めるプロンプトを表示したい場合は、以下のように -i オプションを追加します。

 find . -type f -name "*.txt" -exec rm -i {} ;

出力

rm: remove regular empty file './File22.txt'? y
rm: remove regular empty file './file22.txt'? y
rm: remove regular empty file './file23.txt'?

デフォルトでは、 -rm ディレクトリを削除しないため、確実に再帰的に削除するには、 –r オプションを使用する必要があります。これにより、空のディレクトリとファイルを含むディレクトリが確実に削除されます。 -f オプションは削除を強制し、ファイルとディレクトリの両方に使用されます。

n 日より古いファイルを検索して削除する

現在のディレクトリから 20 日より古いバックアップ ファイルを検索して削除します。

 find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

これにより、20 日以上経過したすべての .bak ファイルが削除されます。

ディレクトリのみを検索して削除する

dir22 というディレクトリを削除するには

find . -type d -name dir22 -exec rm -rf {} ;

ディレクトリ名の大文字と小文字が一致していることを確認するか、 -iname オプションを使用してください。

 find . -type d -iname Dir22 -exec rm -rf {} ;

Dir22 dir22 の両方を削除します

削除する前に確認するには、-i オプションを使用します。

 find . -type d -iname Dir22 -exec rm -rf -i {} ;

出力
rm: ディレクトリ「./Dir22」を削除しますか? n
rm: ディレクトリ「./dir22」を削除しますか? y

この例では、削除されないディレクトリ Dir22 には n を入力し、削除されるディレクトリ dir22 には y を入力しました。

空のファイルを見つけて削除する

次のコマンドのいずれかを使用して、空のファイルを見つけて自動的に削除できます。

 find ./ -type f -size 0 -exec rm -f {} ;

または
./ -type f -size 0 | を見つけます。 xargs rm -f
または
find ./ -type f -size 0 –delete

空のディレクトリを見つけて削除する

空のディレクトリを削除するには、 d オプションを使用します。

 find ./ -type d -empty -exec rmdir {} ;

もう 1 つの方法は、削除の代わりに削除を使用することです。

 find ./ -type d -empty -delete

コンピュータからシステム ファイルや重要なファイルを削除すると、オペレーティング システムやアプリケーションが損傷したり、重要なデータが失われる可能性があることに注意してください。

誤って削除しないようにするには、root 以外のユーザー アカウントを使用することをお勧めします。また、役に立たない適切なファイルを削除していることと、万が一に備えてすべてのデータ ファイルのバックアップがあることを確認してください。

次は何ですか?

ラボまたは非運用環境で上記の Linux find コマンドを試してください。 Crontab を使用してファイル システムのクリーンアップを自動化できるかどうかを確認してください。 Linux をマスターするには、この オンライン コース をチェックしてください。

「 Linux の Find コマンドのベスト 40 例」についてわかりやすく解説!絶対に観るべきベスト2動画

【聞き流し/作業用】 聞き流しリファレンス 「主要Linuxサーバーコマンド編」【プログラミング】
Linux コマンドとターミナルと仲良くなる勉強会
https://www.youtube.com/watch?v=M5JCfGttqno&pp=ygU1IExpbnV4IOOBriBGaW5kIOOCs-ODnuODs-ODieOBruODmeOCueODiCA0MCDkvosmaGw9SkE%3D