Linuxでファイルとディレクトリを見つける方法

Linuxオペレーティングシステムでは、findコマンドを使用してコンピュータ上のファイルとディレクトリを検索できます。 続行するには、次のリストからリンクを選択するか、各セクションを順番に確認してください。

注: 検索を使用するに 、端末セッションを開いてコマンド行にアクセスすることから始めます。

検索の基本機能

オプションなしでfindを実行すると、作業ディレクトリ内およびその下にあるすべてのファイルとディレクトリのリストが作成されます。 たとえば、作業ディレクトリが/ home / hope / Documentsの場合、 findを実行すると次のように出力されます。

  • / home / hope / Documentsにあるすべてのファイル。
  • / home / hope / Documents内のすべてのサブディレクトリ。
  • これらの各サブディレクトリ内のすべてのファイル。

実際に見てみましょう。 まず、pwdコマンドを使って作業ディレクトリを確認しましょう。

pwd

 / home / hope /ドキュメント 

それでは、オプションなしでfindを実行しましょう。

見つける

 。 ./images./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG。 /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

この例では、 Documentsフォルダ内とその下に、合計10個のファイルと4つのサブディレクトリがあります。

出力は作業ディレクトリを表す単一のドットで始まることに注意してください。 オプションを指定せずにfindを実行することは、検索を作業ディレクトリから開始するように指定することと同じです。

見つけます。

上記の例はfindを使うための "正しい"方法です。 FreeBSDのような他のUNIXライクなオペレーティングシステムでそれを使おうとするなら、ディレクトリを指定することが必要であることに気づくでしょう、それでこの形式のコマンドを使うのは良い習慣です。

検索場所の指定

ディレクトリー/ home / hope / Documents / imagesに含まれているファイルとサブディレクトリーのみをリストするには、それをコマンドの最初の引数として指定します。

/ home / hope /ドキュメント/画像を探す

 / home / hope /ドキュメント/画像/ home / hope /ドキュメント/画像/ hp /home/hope/Documents/images/hp/snape.jpg /home/hope/Documents/images/hp/harry.jpg / home / hope /ドキュメント/イメージ/ミーム/home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG /home/hope/Documents/images/memes/picard.jpg 

フルパスも結果に表示されていることに注意してください。

作業ディレクトリが/ home / hope / Documentsの場合は、次のコマンドを使用して同じファイルを見つけることができます。

./imagesを見つける

しかし今回は、出力は検索の開始位置を反映し、次のようになります。

 ./images./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG。 /images/memes/picard.jpg 

デフォルトでは、検索は開始場所のすべてのサブディレクトリを検索します。 検索するサブディレクトリのレベル数を制限したい場合は、 -maxdepthオプションを数字とともに使用できます。

たとえば、 -maxdepth 1を指定すると、検索が開始されたディレクトリでのみ検索されます。 サブディレクトリが見つかった場合、それらは一覧表示されますが、検索はされません。

見つけます。 - 最大深度1

 。 ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso 

-maxdepth 2を指定すると、ディレクトリと1つ下のサブディレクトリが検索されます。

見つけます。 - 最大深度2

 。 ./images ./images/hp ./images/memes ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at- hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

-maxdepth 3を指定すると、それより1レベル深いレベルで検索されます。

見つけます。 - 最大深度3

 。 ./images./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG。 /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

名前で探す

検索結果を特定の名前を持つファイルとディレクトリのみに一致するように制限するには、 -nameオプションを使用して名前を引用符で囲みます。

見つけます。 -name "picard.jpg"

 ./images/memes/picard.jpg 

ファイル名の一部としてワイルドカードを使用することもできます。 たとえば、名前が.jpgで終わるすべてのファイルを検索するには、ファイル名の残りの部分を表すためにアスタリスクを使用できます。 コマンドを実行すると、シェルはファイル名をパターンに一致するものにグロブします。

見つけます。 -name "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg 

このコマンドでは、拡張子( JPG )が大文字のファイルはリストされていません。 これは、Microsoft Windowsなどの他のオペレーティングシステムとは異なり、Linuxのファイル名では大文字と小文字が区別されるためです。

大文字と小文字を区別せずに検索を実行するには、 -inameオプションを使用します。

見つけます。 - 名前 "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

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

ファイルのみをリストし、結果からディレクトリ名を省略するには、 -type fを指定します。

見つけます。 タイプf

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg ./gimp-2.8 .16.tar.bz2 ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual .iso 

ディレクトリのみを表示してファイル名を省略するには、 -type dを指定します。

見つけます。 タイプd

 。 ./images ./images/hp ./images/memes ./hp-fanfic 

サイズに基づいてファイルを見つける

特定のサイズのファイルのみを表示するには、 -sizeオプションを使用できます。 サイズを指定するには、プラスまたはマイナス記号(「より大きい」または「より小さい」の場合)、数値、およびkMGなどの量的接尾辞を使用します。

たとえば、「50キロバイトより大きい」ファイルを見つけるには、 -size + 50kを使用します。

見つけます。 サイズ+ 50k

 ./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

「10メガバイトを超える」ファイルの場合は、 -size + 10Mを使用します。

見つけます。 サイズ+ 10M

 ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

「1ギガバイトより大きい」場合は、 -size + 1Gを使用します。

見つけます。 サイズ+ 1G

 ./archlinux-2016.02.01-dual.iso 

特定のサイズ範囲のファイルには、2つの-sizeオプションを使用してください。 たとえば、「10メガバイトより大きく1ギガバイトより小さい」ファイルを検索するには、 -size + 10M -size -1Gと指定します。

見つけます。 -size + 10M -size -1G

 ./gimp-2.8.16.tar.bz2 

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

-mtimeオプションは、ファイルの内容が変更されてから何日後に検索を制限します。 過去の日数を指定するには、負数を使用します。 たとえば、過去2日間(48時間前)に変更されたファイルのみを検索するには、 -mtime -2を使用します。

見つけます。 -mtime -2

-mminオプションでも同じことができますが、日数ではなく分数で表します。 たとえば、このコマンドは過去30分以内に変更されたファイルのみを表示します。

見つけます。 -mmin -30

同様のオプションは-ctimeです 。これは、ファイルのステータスが最後に変更された日時を日数でチェックします。 ステータスの変更は、ファイルのメタデータの変更です。 たとえば、ファイルの権限を変更することはステータスの変更です。

オプション-cminは、分単位で測定された状況変化を検索します。

ファイルが最後にアクセスされた日時、つまりその内容が最後に表示された日時を検索することもできます。 -atimeオプションは、日数で測定された最新のアクセス時間に基づいてファイルを検索するために使用されます。

-aminオプションは同じ検索制限を実行しますが、数分で測定されます。

テキストファイルへの出力のリダイレクト

非常に大規模な検索を実行している場合は、後で検索結果を表示できるように、検索結果をファイルに保存することをお勧めします。 あなたはあなたの検索出力をファイルにリダイレクトすることによってこれをすることができます:

見つけます。 -iname "* .jpg"> images.txt

その後、結果をテキストエディタで開くか、 catコマンドでそれらを印刷することができます。

猫images.txt

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

あるいは、出力をteeコマンドに渡して 、出力を画面に出力してファイルに書き込むこともできます。

見つけます。 サイズ+ 500M ティーbigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

cat bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

エラーメッセージを抑制する

検索を実行すると、 "アクセス許可が拒否されました"というエラーメッセージが表示されることがあります。 たとえば、通常のユーザーとしてルートディレクトリを検索すると、次のようになります。

見つける/

 find: `/ var / lib / sudo / ts ':パーミッションが拒否されましたfind:` / var / lib / sudo /ctured':パーミッションが拒否されましたfind: `/ var / lib / polkit-1 ':パーミッションが拒否されましたfind:` / var / lib / container ':パーミッションが拒否されましたfind: `/var/lib/gdm3/.dbus':パーミッションが拒否されましたfind:` /var/lib/gdm3/.config/ibus ':パーミッションが拒否されました... 

findがあなたのユーザアカウントが読む許可を持っていないファイルにアクセスしようとすると、あなたはそのエラーメッセージを受け取るでしょう。 システム上のすべてのファイルに完全にアクセスできるスーパーユーザー( root )として検索を実行できる可能性があります。 しかし、他に選択肢がない場合を除き、 rootとして実行することはお勧めできません。

あなたがする必要があるのが "Permission denied"メッセージを隠すことだけであるなら、あなたは2&> 1を加えることができます grep -v次のように、コマンドの最後まで「Permission denied」と入力します。

/ 2>&1 | grep -v "パーミッションが拒否されました"

上記の例では、検索から「アクセス許可が拒否されました」というメッセージを除外しています。 どうやって?

2>&1はエラーメッセージを標準出力に送り、結合された出力行をgrepコマンドにパイプ処理する特別なリダイレクトです。 grep -vは、 "Permission denied"に対して逆一致を実行し、その文字列を含まない行だけを表示します。

grepをリダイレクトしてエラーメッセージをフィルタリングすることは、 "Permission denied"が検索結果を雑然とさせ、rootとして検索を実行できない場合に便利なテクニックです。

〜/を見つけてください。 -name "* .txt" - アミン-120

あなたのホームディレクトリとその下の拡張子 " .txt "で終わるすべてのファイルを見つけてください。 過去2時間以内にアクセスされたファイルのみを表示します。

見つけます。 -name "* .zip" -size + 10M -mtime -3

作業ディレクトリ以下の、拡張子が " .zip "でサイズが10メガバイトを超えるファイルをすべて見つけます。 過去72時間に内容が変更されたファイルのみを表示します。

見つけます。 -iname "* report *" -type f -maxdepth 2

名前に " report "という単語が含まれているファイルに対して、大文字と小文字を区別しない検索を実行します。 検索で名前に "report"が含まれているディレクトリが見つかった場合は表示しないでください。 作業ディレクトリとその下のディレクトリレベルでのみ検索します。

検索/名前 "* init *" 2>&1 | grep -v "パーミッションが拒否されました" tee〜/ initfiles.txt

名前が " init "を含むシステム上のすべてのファイルを検索し、エラーメッセージを抑制します。 結果を画面に表示し、それらをホームディレクトリの " initfiles.txt "という名前のファイルに出力します。