理想的には、次のようなプログラムを使用できます
find [file or directory name]
一致するファイル名/ディレクトリを持つパスを報告します。残念ながら、これはフォルダ全体ではなく、現在のディレクトリのみをチェックするようです。
私はどこかを見つけようとしましたが、どこかでコンピュータ上でそれを知っていたとしても、どれもファイルを見つけません。
「残念ながら、これはフォルダ全体ではなく現在のディレクトリのみをチェックするようです」。おそらくあなたはそれがサブディレクトリに見えないことを意味します。これを修正するには、find -name "filename"
を使用します
問題のファイルが現在の作業ディレクトリにない場合は、次の方法でマシン全体を検索できます。
find / -name "filename"
これはfind / -name "*.pdf"
などのようなものでも機能します。時々、それをgrepステートメントにパイプしたいこともあります(少なくとも、私のマシンでは、結果が強調表示されるため)。
find / -name "*star*wars*" | grep star
これまたは同様の方法を行うと、ファイル名をすぐに見つけて、実際に探しているファイルであるかどうかを認識するのに役立ちます。
一部のディレクトリでネストを見つける必要がある場合:
find / -type f -wholename "*dirname/filename"
または接続されたディレクトリ:
find / -type d -wholename "*foo/bar"
find
コマンドには時間がかかります。ファイルを検索する最も速い方法は、locate
コマンドを使用することです。このコマンドは、インデックス付きデータベース(コマンドupdatedb
で更新)でファイル名(およびパス)を検索します。
結果は簡単なコマンドですぐに表示されます:
locate {file-name-or-path}
コマンドが見つからない場合は、mlocate
パッケージをインストールし、最初にupdatedb
コマンドを実行して、初めて検索データベースを準備する必要があります。
許可エラー(など)を取り除くには、stderrをどこにもリダイレクトできません。
find / -name "something" 2>/dev/null
探しているコマンドファイルの場合、最速かつ最も正確な方法は
which "commandname"
システム上に同じ名前のファイルが多数ある場合でも、コマンドに使用されている実際のファイルが表示されます。
以下の例は、現在のディレクトリで特定のフォルダを見つけるのに役立ちます。この例では、現在のダイレクトのみを検索し、現在のディレクトリで使用可能なサブディレクトリを検索します
#!/bin/bash
result=$(ls -d operational)
echo $result
test="operational"
if [ "$result" == "$test" ]
then
echo "TRUE"
else
echo "FALSE"
fi