Linuxオペレーティングシステムでは、findコマンドを使用してコンピュータ上のファイルとディレクトリを検索することができます。 続行するには、次のリストからリンクを選択するか、順番に各セクションを参照してください。
findを使用するには、まずターミナルセッションを開いてコマンドラインにアクセスします。
findの基本機能
findをオプションなしで実行すると、作業ディレクトリ内およびその下のすべてのファイルとディレクトリのリスト, たとえば、作業ディレクトリが/home/hope/Documentsの場合、findを実行すると次のように出力されます。
- /home/hope/Documents内のすべてのファイル。
- /home/hope/Documents内のすべてのサブディレクトリ。
- これらの各サブディレクトリ内のすべてのファイル。
実際に見てみましょう。, まず、pwdコマンドを使用して作業ディレクトリをチェックしましょう。
pwd
/home/hope/Documents
次に、オプションなしでfindを実行しましょう。
find
この例では、Documentsフォルダ内とその下に合計十つのファイルと四つのサブディレクトリが表示されます。
出力は、作業ディレクトリを表す単一のドットで始まることに注意してください。, オプションなしでfindを実行することは、次のように作業ディレクトリで検索を開始するように指定することと同じです。
find .
上記の例は、findを使 FreeBSDなどの他のUnix系オペレーティングシステムで使用しようとする場合は、ディレクトリを指定する必要があります。 この形式のコマンドを使用することをお勧めします。,
検索する場所の指定
ディレクトリ/home/hope/Documents/imagesに含まれるファイルとサブディレクトリのみを一覧表示するには、コマンドの最初の引数を次のように指定します。
find /home/hope/Documents/images
フルパスも結果に表示されることに注意してください。,
作業ディレクトリが/home/hope/Documentsの場合、次のコマンドを使用して同じファイルを見つけることができます。
find ./images
しかし、今回の出力は検索の開始位置を反映し、次のようになります。
デフォルトでは、検索は開始位置のすべてのサブディレクトリを検索します。 検索するサブディレクトリのレベル数を制限する場合は、-maxdepthオプションを数値とともに使用できます。
たとえば、-maxdepth1を指定すると、検索が開始されたディレクトリ内でのみ検索されます。, サブディレクトリが見つかった場合、それらは一覧表示されますが、検索されません。,
find . -maxdepth 1
../images./bigfiles.txt./gimp-2.8.16.tar.bz2./hp-fanfic./archlinux-2016.02.01-dual.iso
-maxdepth2を指定すると、ディレクトリと一つのサブディレクトリの深さを検索します。
find . -maxdepth 2
-maxdepth3を指定すると、それよりも深いレベルを検索します。
find . -maxdepth 3
名前で検索
検索結果を特定の名前を持つファイルとディレクトリのみに一致させるように制限するには、-nameオプションを使用し、名前を引用符で囲みます。
find . -name "picard.jpg"
./images/memes/picard.jpg
ファイル名の一部としてワイルドカードを使用することもできます。, たとえば、名前がで終わるすべてのファイルを検索します。jpgでは、残りのファイル名を表すためにアスタリスクを使用できます。 コマンドを実行すると、シェルはファイル名をパターンに一致するものにグロブします。
find . -name "*.jpg"
./images/hp/snape.jpg./images/hp/harry.jpg./images/memes/winteriscoming.jpg./images/memes/picard.jpg
私たちのコマンドは、拡張子(この場合はJPG)が大文字であるファイルをリストしていないことに注意してください。 それとは異なり、その他業務システムなど、Microsoft Windows、Linuxのファイル名で大文字と小文字が区別される。,”>
ディレクトリのみをリストし、ファイル名を省略するには、-type d:
find . -type d
../images./images/hp./images/memes./hp-fanfic
サイズに基づいてファイルを検索する
たとえば、”50キロバイトより大きい”ファイルを検索するには、-size+50k:
find . -size +50k
./images/memes/winteriscoming.jpg./gimp-2.8.16.tar.bz2./archlinux-2016.02.01-dual.iso
“10メガバイトより大きい”ファイルの場合は、-size+10mを使用します。
find . -size +10M
./gimp-2.8.16.tar.bz2./archlinux-2016.02.01-dual.iso
“1ギガバイトより大きい”の場合は、-size+1gを使用します。
find . -size +1G
./archlinux-2016.02.01-dual.iso
特定のサイズ範囲のファイルには、two-sizeオプションを使用します。, たとえば、”10メガバイトより大きいが1ギガバイトより小さい”ファイルを検索するには、-size+10M-size-1Gを指定します。
find . -size +10M -size -1G
./gimp-2.8.16.tar.bz2
変更、アクセス、またはステータス変更に基づいてファイルを検索する
-mtimeオプションは、ファイルの内容が変更されてから何日以内に検索を制限します。 過去の日数を指定するには、負の数を使用します。, たとえば、過去二日(48時間前)に変更されたファイルのみを検索するには、-mtime-2を使用します。
find . -mtime -2
-mminオプションは同じことを行いますが、日ではなく分 たとえば、このコマンドは過去半時間内に変更されたファイルのみを表示します。
find . -mmin -30
同様のオプションは-ctimeで、ファイルのステータスが最後に変更されたときを日単位でチェックします。 ステータスの変更は、ファイルのメタデータの変更です。 たとえば、ファイルの権限を変更することはステータス変更です。,
-cminオプションは、分単位で測定されたステータス変更を検索します。
また、ファイルが最後にアクセスされたとき、つまり、その内容が最後に表示されたときを検索することができます。 -Atimeオプションは、最新のアクセス時間(日数)に基づいてファイルを検索するために使用されます。
-aminオプションは、同じ検索制限を実行しますが、分単位で測定されます。
出力をテキストファイルにリダイレクトする
非常に大きな検索を実行している場合は、検索結果をファイルに保存して、後で結果を表示できるようにすることができます。, これを行うには、find出力をファイルにリダイレクトします。
find . -iname "*.jpg" > images.txt
結果をテキストエディタで開くか、catコマンドで印刷します。
cat images.txt
または、出力をteeコマンドにパイプして、出力を画面に出力し、ファイルに書き込むことができます。
find . -size +500M | tee bigfiles.txt
./archlinux-2016.02.01-dual.iso
cat bigfiles.txt
./archlinux-2016.02.01-dual.iso
エラーメッセージの抑制
検索を実行すると、”permission denied”というエラーメッセージが表示されることがあります。, たとえば、ルートディレクトリを通常のユーザーとして検索すると、
find /
findがファイルにアクセスしようとすると、そのエラーメッセージが表示されます。 システム上のすべてのファイルに完全にアクセスできるスーパーユーザー(root)として検索を実行できます。 しかし、他のオプションがない限り、rootとして物事を行うことはお勧めしません。,
“Permission denied”メッセージを非表示にするだけの場合は、次のようにコマンドの最後に2&>1|grep-v”Permission denied”を追加できます。
find / 2>&1 | grep -v "Permission denied"
上記の例では、検索から”Permission denied”メッセージを除外します。 どう?
2>&1は、出力の結合された行をgrepコマンドにパイプするために標準出力にエラーメッセージを送信する特別なリダイレクトです。, 次に、grep-vは”Permission denied”に対して逆マッチを実行し、その文字列を含まない行のみを表示します。
grepをリダイレクトして使用してエラーメッセージをフィルタリングすることは、”Permission denied”が検索結果を混乱させ、rootとして検索を実行できない場合に便利
例
find ~/. -name "*.txt" -amin -120
あなたのホームディレクトリ内のすべてのファイルを検索し、その下に拡張子”で終わります。txt”。 過去二時間にアクセスされたファイルのみを表示します。,
find . -name "*.zip" -size +10M -mtime -3
作業ディレクトリ内のすべてのファイルを検索し、その名前が拡張子”を持つ以下のファイルを検索します。zip”とそのサイズが10メガバイトより大きい。 過去72時間以内に内容が変更されたファイルのみを表示します。
find . -iname "*report*" -type f -maxdepth 2
名前に”report”という単語が含まれているファイルに対して、大文字と小文字を区別しない検索を実行します。 名前に”report”が含まれているディレクトリが検索された場合は、表示しないでください。 作業ディレクトリとその下のディレクトリレベルでのみ検索します。,
find / -name "*init*" 2>&1 | grep -v "Permission denied" | tee ~/initfiles.txt
名前に”init”が含まれているシステム上のすべてのファイルを検索し、エラーメッセージを抑制します。 結果を画面に表示し、”initfiles”という名前のホームディレクトリ内のファイルに出力します。txt”。
コメントを残す