web-dev-qa-db-ja.com

Linuxコマンドラインのどこにでもある可能性のあるファイル/ディレクトリを見つけるにはどうすればよいですか?

理想的には、次のようなプログラムを使用できます

find [file or directory name]

一致するファイル名/ディレクトリを持つパスを報告します。残念ながら、これはフォルダ全体ではなく、現在のディレクトリのみをチェックするようです。

私はどこかを見つけようとしましたが、どこかでコンピュータ上でそれを知っていたとしても、どれもファイルを見つけません。

53
johncorser

「残念ながら、これはフォルダ全体ではなく現在のディレクトリのみをチェックするようです」。おそらくあなたはそれがサブディレクトリに見えないことを意味します。これを修正するには、find -name "filename"を使用します

問題のファイルが現在の作業ディレクトリにない場合は、次の方法でマシン全体を検索できます。

find / -name "filename"

これはfind / -name "*.pdf"などのようなものでも機能します。時々、それをgrepステートメントにパイプしたいこともあります(少なくとも、私のマシンでは、結果が強調表示されるため)。

find / -name "*star*wars*" | grep star

これまたは同様の方法を行うと、ファイル名をすぐに見つけて、実際に探しているファイルであるかどうかを認識するのに役立ちます。

78
Russell Uhl

一部のディレクトリでネストを見つける必要がある場合:

find / -type f -wholename "*dirname/filename"

または接続されたディレクトリ:

find / -type d -wholename "*foo/bar"
7
Andrey

findコマンドには時間がかかります。ファイルを検索する最も速い方法は、locateコマンドを使用することです。このコマンドは、インデックス付きデータベース(コマンドupdatedbで更新)でファイル名(およびパス)を検索します。

結果は簡単なコマンドですぐに表示されます:

locate {file-name-or-path}

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

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

3
thucnguyen

許可エラー(など)を取り除くには、stderrをどこにもリダイレクトできません。

find / -name "something" 2>/dev/null
3
user52028778

探しているコマンドファイルの場合、最速かつ最も正確な方法は

which "commandname"

システム上に同じ名前のファイルが多数ある場合でも、コマンドに使用されている実際のファイルが表示されます。

0
Douglas Milnes

以下の例は、現在のディレクトリで特定のフォルダを見つけるのに役立ちます。この例では、現在のダイレクトのみを検索し、現在のディレクトリで使用可能なサブディレクトリを検索します

#!/bin/bash

result=$(ls -d operational)

echo $result

test="operational"

if [ "$result" == "$test" ] 
then 
   echo "TRUE"
else
   echo "FALSE"
fi