Findコマンドを使用してLinux上のファイルとディレクトリを検索|Opensource.com
私がどのように整理されているかにかかわらず、ファイルを見つけることができないときが常にあるようです。 私は最初の場所でファイルの名前を覚えていないので、時にはそれがあります。 他の回、私は名前を知っていますが、私はそれを保存することを決めた場所を思い出すことはできません。 最初に作成しなかったファイルが必要な場合もあります。 しかし、どんな疑問があっても、私はPOSIXシステムでは、私はいつもfind
コマンドを持っていることを知っています。
findのインストール
find
コマンドはPOSIX仕様によって定義されており、POSIXシステム(Linux、BSD、macOSを含む)を測定するためのオープン標準を作成しています。 簡単に言えば、Linux、BSD、またはmacOSを実行している限り、すでにfind
がインストールされています。
しかし、すべてのfind
コマンドが完全に似ているわけではありません。 たとえば、GNUfind
コマンドには、BSD、Busybox、Solarisfind
コマンドにはない機能や、実装が異なる機能があります。 この記事では、FINDUTILSパッケージのGNUfind
を使用しています。 この記事で示されているほとんどのコマンドはfind
の他の実装で動作しますが、Linux以外のプラットフォームでコマンドを試してみて、予期しない結果が得られた場合は、GNUバージョンをダウンロードしてインストールしてみてください。
名前でファイルを検索する
正規表現を使用して完全なファイル名またはファイル名の一部を指定すると、ファイル名でファイルを検索できます。 find
コマンドには、検索するディレクトリへのパス、検索する属性を指定するオプション(大文字と小文字が区別されるファイル名の場合は-name
など)、検索文字列が必要です。 デフォルトでは、検索文字列は文字通り扱われます。find
コマンドは、正規表現構文を使用しない限り、引用符の間に入力した文字列と同じファイル名を検索します。
ドキュメントディレクトリに四つのファイルが含まれていると仮定します: Foo
, foo
, foobar.txt
, とfoo.xml
。 ここでは、”foo”という名前のファイルをリテラル検索します:
$ find ~ -name "foo"
/home/tux/Documents/examples/foo
-iname
オプションを使用して大文字と小文字を区別しないようにすることで、検索を広げることができます:
$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
ワイルドカード
基本的なシェルワイルドカード文字を使用して、検索を拡大できます。 たとえば、アスタリスク(*
)は任意の数の文字を表します:
$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
疑問符(?
)は、単一の文字を表します:
$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
これは正規表現の構文ではないため、この例ではドット(.
)はリテラルのドットを表します。
正規表現
正規表現を使用することもできます。 -iname
と-name
と同様に、大文字と小文字を区別するオプションと大文字と小文字を区別しないオプションの両方があります。 ただし、-name
および-iname
オプションとは異なり、-regex
および-iregex
検索はファイル名だけでなくパス全体に適用されます。 つまり、foo
を検索しても、foo
が/home/tux/Documents/foo
と一致しないため、結果は得られません。 代わりに、パス全体を検索するか、文字列の先頭にワイルドカードシーケンスを使用する必要があります:
$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
先週に変更されたファイルを検索する
先週に変更されたファイルを検索するには、-mtime
オプションと過去の(負の)日数を使用します:
$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
日の範囲内で変更されたファイルを検索する
-mtime
オプションを組み合わせて、日の範囲内のファイルを検索することができます。 最初の-mtime
引数には、ファイルを変更した可能性のある最新の日数を指定し、2番目の引数には最大の日数を指定します。 たとえば、この検索では、過去に1日以上の変更時間を持つファイルが検索されますが、7日以下の変更時間を持つファイルが検索されます。:
$ find ~ -mtime +1 -mtime -7
ファイルタイプで検索を制限する
探しているファイルタイプを指定してfind
の結果を最適化するのが一般的です。 あなたが探しているものがわからない場合は、このオプションを使用するべきではありませんが、あなたはファイルではなく、ディレクトリ、またはディ オプションは-type
であり、その引数はいくつかの異なる種類のデータを表す文字コードです。 最も一般的なものは次のとおりです:
-
d
– ディレクトリ -
f
– ファイル -
l
– シンボリックリンク -
s
– ソケット -
p
– 名前付きパイプ(FIFOに使用) -
b
– ブロックスペシャル(通常はハードドライブの指定)
ここにいくつかの例があります:
$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1
Adjust scope
find
コマンドはデフォルトで再帰的であり、ディレクトリに含まれるディレクトリのディレクトリ(など)で結果を検索します。 これは大規模なファイルシステムで圧倒的になる可能性がありますが、-maxdepth
オプションを使用して、find
を下降させるフォルダ構造の深さを制御できます:
$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15
再帰の最小深さは、次のように交互に設定できます-mindepth
:
$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255
チートシートのダウンロード
この記事ではfind
の基本的な機能のみをカバーしています。 それはあなたのシステムを検索するための素晴らしいツールですが、それはまた、強力な並列コマンドのための本当に便利なフロントエンドです。 find
を学ぶには多くの理由がありますので、無料のfind
チートシートをダウンロードして、コマンドの詳細を学ぶのに役立ちます。
Leave a Reply