Linuxは与えられた文字列でファイル名を見つけます


107

私はUbuntuを使用しています。現在のディレクトリとサブディレクトリに、名前に「John」という文字列が含まれるすべてのファイルを検索したいと考えています。grepファイルの内容と一致することはわかっていますが、ファイル名でどのように使用するかわかりません。任意の助けいただければ幸いです。


回答:


195

findコマンドを使用して、

find . -type f -name "*John*"

1
を使用してカスタムbashスクリプトを作成#!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi するF search-stringと、完璧なショートカットとして実行できます
Ilia Rostovtsev

@IliaRostovtsev-いいです[ -z "$1" ]が、少し良いでしょう。
Joe

@ジョーああ、そうです。パスにスペースが含まれている場合はどうですか?しかし、ここでは$ 1のスペースの存在を確認するだけで$ 2が表示されます。理論的にはもっといいということですか?
Ilia Rostovtsev、2015年

@IliaRostovtsev-実際、私は間違っていました。$ 1がnullの場合、テストはになりif [ -z ]ます。構文エラーになると思っていましたが、動作します。今後、コードの一部を簡略化できます。
Joe

25

正解はすでに提供されていますが、あなた自身を助ける方法を学ぶために、私は別の方法で何か役立つものを投入すると思いました。達成しようとしていることを一言で要約すると、Linuxには強力なヘルプ機能があります。

man -k <your search term>

これは、簡単な説明に検索語が含まれるすべてのコマンドをリストすることです。通常、あなたが探しているものが見つかる可能性はかなり高いです。;)

その出力は時々やや圧倒的である可能性があるので、以下のように、利用可能なすべてのマンページではなく、実行可能ファイルに絞り込むことをお勧めします。

man -k find | egrep '\(1\)'

または、次のように、より高い特権レベルを必要とするコマンドも検索したい場合:

man -k find | egrep '\([18]\)'

3
私は好奇心が強い...検索を介して当面の問題を解決しようとしないことを示す質問は賛成票を獲得し、可能なコマンドについて調べる方法についての親しみやすい説明が踏みにじられる。基準は何ですか?:)
2012年

1
私はあなたに賛成票を投じました。レッスンはそれができる人は少ないです。しかし、サンプルを表示して適応することができます:)
tgkprog 2013

2

findそれは、ファイルシステム内の実際のファイルをスキャンするので、コマンドには長い時間がかかります。

最も簡単な方法はlocateコマンドを使用することで、すぐに結果が得られます。

locate "John"

コマンドが見つからない場合は、最初にmlocateパッケージをインストールしてupdatedbコマンドを実行し、検索データベースを初めて準備する必要があります。

詳細はこちら:https : //medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab


1

そのシンプルなACKを使用してください。入力するだけack <string to be searched>


これには、ファイルだけでなく、検索テキストを含むすべてのパスも含まれるようです。stackoverflow.com
underscore_d

1

これは、tree検索するディレクトリでコマンドを使用する非常に簡単なソリューションです。-f完全なファイルパスを示し、|treeの出力をパイプして名前にgrep文字列を含むファイルを見つけるために使用されますfilename

tree -f | grep filename
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.