ホーム テクノロジー LINUX Linux で find コマンドを使用するにはどうすればよいですか? 【初心者向けガイド】

Linux で find コマンドを使用するにはどうすればよいですか? 【初心者向けガイド】


基本的な形式では、検索は簡単です。同時に、利用可能なオプション、テスト、アクションが多数あるため、複雑になる可能性があります。

find コマンドは非常に強力なツールなので、努力して習得することは価値があります。これは、ディスク領域管理、再帰的なファイル操作、バックアップなどのさまざまなシステム管理タスクを効率的に実行するのに役立ちます。

Linux の find コマンドは、定義した基準に基づいてファイルとフォルダーを検索し、検索結果に対してアクションを実行できるようにします。 find の構文は次のようになります。

 $ find directory-to-search criteria action

どこ

  • directory-to-search は、find がファイルの検索を開始する開始点です。検索には、このディレクトリの下にあるすべてのサブディレクトリが含まれます。
  • 条件 (テスト) はどのファイルを検索するかを指示します
  • action は、条件に一致することが見つかった各ファイルをどうするかを指示します。

テスト

名前で検索

以下に簡単な例を示します。次のコマンドは、現在のディレクトリでファイル a.txt を検索します。

 $ find . -name "a.txt"
./a.txt

どこ

  • 。現在のディレクトリを指します
  • -name test は一致する基準を指定します

-name テストを使用したこの検索で​​は大文字と小文字が区別され、ファイル A.txt は無視されます。検索で大文字と小文字が区別されていることを確認するには、 -inameテストを使用します。

 $ find . -iname "a.txt"
./a.txt
./A.txt

現在のディレクトリ内のすべての.jpg画像ファイルを検索するには、ワイルドカード パターン*.jpgを使用します。

 $ find . -name "*.jpg"
./genxfacebook2.jpg
./genxfacebook1.jpg
./Moodle2.jpg
./moodle.jpg
./moodle/moodle1.jpg
./genxfacebook.jpg

検索するディレクトリ名を使用できます。たとえば、/home ディレクトリ内のすべての .jpg 画像を検索するには、次のようにします。

 $ find /home -name "*.jpg"
find: `/home/ubuntu/.ssh': Permission denied
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
find: `/home/me/testfiles': Permission denied
find: `/home/me/data': Permission denied
/home/me/water.jpg
find: `/home/me/.cache': Permission denied

アクセス許可拒否エラーが多すぎる場合は、コマンドの最後に 2>/dev/null を追加できます。これにより、エラー メッセージが /dev/null デバイスにリダイレクトされ、よりクリーンな出力が得られます。

 find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
/home/me/water.jpg

ファイルの種類で検索する

-typeテストを使用すると、ファイルをタイプ別に検索できます。ファイルの種類は次のとおりです。

 f plain files
d directories
l symbolic links
b block devices
c character devices
p named pipes
s sockets

たとえば、test -type d を使用すると、ディレクトリのみがリストされます。

 $ find . -type d
.
./.ssh
./.cache
./moodle

ファイルサイズで探す

大きなファイルを検索して削除する必要がある場合があります。次の例では、test -size の後に文字列 +1G が続きます。これにより、1 GB を超えるすべてのファイルが検索されます。

 $ find . -size +1G 
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg

+ 記号は、次の数値より大きいファイルを検索することを意味します。マイナス記号 (-) は、より小さいことを示すために使用できます。符号を使用しない場合は、サイズが正確に一致することを意味します。

数値の後にファイル サイズの単位が続きます。単位は次のとおりです。

キャラクターファインサイズユニット
b 521 バイトブロック
cバイト
kキロバイト
Mメガバイト
Gギガバイト

空のディレクトリとファイルを検索する

次のように-empty test を使用して空のディレクトリとファイルを見つけます。

 $ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed

ファイルの変更時刻で検索する

-cmin test を使用すると、作成時間または変更時間に基づいてすべてのファイルとディレクトリを検索できます。過去 60 分間に変更されたすべてのファイル (60 未満) を検索するには、次のように-60を使用します。

 $ find . -cmin -60
.
./a.txt
./datafiles

過去 60 分より前に変更されたファイルの場合は、 +60を使用します。

アクセス時間から探す

-atime test を使用すると、最終アクセス時刻によってファイルを検索できます。たとえば、次のコマンドは、過去 180 日間にアクセスされていないファイルを検索します。

 $ find . -atime +180

ディスク容量が不足している場合は、これらをバックアップ デバイスに移動できます。

ユーザー名で検索

-user username test を使用すると、ユーザーに属するすべてのファイルとディレクトリを検索できます。たとえば、次のコマンドは、/home ディレクトリ内でユーザー ubuntu が所有するすべてのファイルとディレクトリを検索します。

 $ find /home -user ubuntu 2>/dev/null
/home/ubuntu
/home/ubuntu/.bash_logout
/home/ubuntu/.bashrc
/home/ubuntu/.ssh
/home/ubuntu/.profile

モードから探す

特定のモードに設定されたファイル、つまり特定の権限セットを持つファイルを検索したいですか? -perm テストを使用します。次の例では、アクセス許可が 777 に設定されているファイルを検索します。

 $ find /home -perm 777

オペレーター

次の 3 つの論理演算子を使用して、1 つの find コマンドで複数のテストを組み合わせることができます。

  • -そして
  • -または
  • -ない

たとえば、次のコマンドは、ユーザー me が所有する 100MB を超えるファイルを検索します。

 $ find /home  -user me  -and  -size +100M  2>/dev/null
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

次のコマンドは、ユーザー me またはユーザー vagrant が所有する 100MB を超えるファイルを検索します。

 $ find /home \( -user vagrant -or -user me \)  -and  -size +100M  2>/dev/null
/home/vagrant/LibreOffice_7.0.1_Linux_x86-64_deb.tar.gz
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

シェルが括弧を解釈しようとしないように、括弧の前にバックスラッシュ文字を置く必要があります。

行動

find を使用すると、検索結果が表示され、その結果に対してアクションを実行するかどうかを選択できます。以下に事前定義されたアクションをいくつか示します。

アクション説明
-消去検索条件に一致するファイルを削除します
-lsファイル サイズと i ノード数を含む詳細な ls 出力を表示します。
-印刷一致するファイルの完全なパス名を表示します。他のアクションが指定されていない場合は、これがデフォルトのアクションです
-実行検索出力の各行で次のコマンドを実行します。

したがって、すべての空のファイルを検索して削除したい場合は、次の方法で実行できます。

 $ find . -empty -delete

注意: 削除アクションを使用する前に、 -printアクションを使用してコマンドを 1 回実行し、結果を確認すると安全です。

-execアクションは特別です。検索結果に対して選択したコマンドを実行できます。こんな感じです:

 -exec <em>command</em> {} \;

ここ

  • command は、rm、mv、cp などの検索結果に対して実行するコマンドです。
  • {}は検索結果を表します。
  • コマンドは、バックスラッシュでエスケープされたセミコロンで終わります。

したがって、空のファイルをすべて検索して削除するコマンドは次のように記述できます。

 $ find . -empty -exec rm {} \;

-execアクションを使用した別の例を次に示します。次のコマンドは、すべての.png画像ファイルをbackup/images ディレクトリにコピーします。

 $ find . -name "*.png" -exec cp {} /backups/images \;

結論

Linux の find コマンドを使用すると、名前、最終アクセス日、最終変更日、ユーザー (所有者) 名、グループ名、サイズ、アクセス許可、およびその他のさまざまな基準に基づいてファイルを検索できます。これらの検索結果を使用して、削除、コピー、別の場所への移動などのアクションを実行できます。

find コマンドをマスターすると、非常に役立ち、システム管理タスクを簡素化できます。それをマスターするための鍵は、練習して使うことです。

「 Linux で find コマンドを使用するにはどうすればよいですか? 【初心者向けガイド】」についてわかりやすく解説!絶対に観るべきベスト2動画

【Linuxコマンドの基本01】 ファイルを管理する Bash上でファイル、ディレクトリを作る、消す、そして、ファイルとはなにか、ディレクトリとは? 初心者にわかりやすく解説。
Linux コマンドとターミナルと仲良くなる勉強会
https://www.youtube.com/watch?v=M5JCfGttqno&pp=ygV1IExpbnV4IOOBpyBmaW5kIOOCs-ODnuODs-ODieOCkuS9v-eUqOOBmeOCi-OBq-OBr-OBqeOBhuOBmeOCjOOBsOOCiOOBhOOBp-OBmeOBiz8g44CQ5Yid5b-D6ICF5ZCR44GR44Ks44Kk44OJ44CRJmhsPUpB