コマンドラインを使用して名前でファイルを検索する

コマンドラインを使用してファイルの場所を特定したいと思います。 私は試しました:

find . -type f -name "postgis-2.0.0"

locate postgis-2.0.0

無駄に。 ファイルの名前を指定して、ファイルのディレクトリを決定するコマンドは何ですか?

試してみてください find ~/ -type f -name "postgis-2.0.0" 代わりに。

を使用して . 現在のディレクトリのみを検索します。 ~/ あなたの全体のホームディレクトリを検索します(おそらくあなたがそれをダウンロー あなたが使用した場合 wget rootとして、それはどこか別の場所にある可能性があるので、あなたは使用することができます / ファイルシステム全体を検索する。

グッドラック

私は試してみるだろう:

sudo find / -type d -name "postgis-2.0.0"

ザ. あなたが本当にわからない場合は、ルートからすべてを検索することをお勧めします。 また、type-fは、フォルダではなくファイルを検索することを意味します。 追加 sudo それはすべてのフォルダ/サブフォルダを検索することができます。

あなたの構文 locate 正しいですが、実行する必要がある場合があります

sudo updatedb

最初に。 何らかの理由で、私は幸運を持っていることはありません locate しかし。

locate によって作られたファイルやディレクトリのデータベースを使用しています updatedb. あなたが新しいファイルをダウンロードしたのであれば、より多くのチャンスがあ updatedb ファイルとディレクトリのデータベースを更新していません。 あなたが使用することができます sudo updatedb 使用する前に locate ユーティリティプログラム。updatedb 一般的に、linuxシステム上で単独で一日一回実行されます。

他の答えは良いですが、私は省略しています Permission denied 文は私に明確な答えを与えます(省略 stderrsが実行されていないため sudo):

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null

どこで:

  • / 検索を開始するディレクトリに置き換えることができます
  • f と置き換えることができます d ファイルの代わりにディレクトリを探している場合
  • -iname と置き換えることができます -name 検索で大文字と小文字を区別したい場合は、次のようにします。
  • その *検索にワイルドカードを使用したくない場合は、検索語のsを省略できます

別の方法は次のとおりです。:

find / -type f 2>/dev/null | grep "postgis-2.0.0"

この方法では、検索語が完全なファイルパス内の任意の場所に一致する場合、結果を返します。 /home/postgis-2.0.0/docs/Readme.txt

findは、最も便利なLinux/Unixツールの一つです。

試してみてください find . -type d | grep DIRNAME

試してみてください find . -name "*file_name*"

  • あなたが変更することができます場所'。'(現在のディレクトリを調べる)から'/'(システム全体を調べる)または'~/'(ホームディレクトリを調べる)。

  • 大文字と小文字を区別したくない場合は、"-name"を"-iname"に変更できます。

  • あなたが変えることができる場所"file_name"(それが何であれ、開始および終了することができますファイル)ファイルの正確な名前に。

これは、ファイルの位置を簡素化する必要があります:

これはあなたにファイルへの完全なパスを与えるでしょう

tree -f  / | grep postgis-2.0.0

Treeディレクトリの内容をツリーのような形式で一覧表示します。 その -f ファイルへのフルパスを与えるようにtreeに指示します。 その場所や親の場所がわからないので、ファイルシステムのルートから検索するのが良いです / 再帰的に下方に。次に、出力をgrepに送信して単語を強調表示します, postgis-2.0.0

一方、 find コマンドは、再帰的にディレクトリツリーを横断する最も簡単な方法であり、他の方法があり、特にデフォルトでUbuntuに付属の二つのスクリプト言語は、

バッシュ

bash 非常に素晴らしいを持っています globstar ディレクトリツリーの再帰的なトラバーサルを可能にするシェルオプション。 私達がする必要があるのはかどうか項目のためのテストです ./**/* expansionはファイルであり、目的のテキストが含まれているかどうか:

bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0

Perl

PerlにはFindモジュールがあり、ディレクトリツリーの再帰的なトラバーサルを実行し、サブルーチンを介して特定のアクションを実行します。 小さなスクリプトを使用すると、ディレクトリツリーをトラバースし、目的の文字列を含むファイルを配列にプッシュして、次のように印刷できます:

#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find(     sub{          -f $_ && $_ =~ $ARGV[0]                 && push @wanted_files,$File::Find::name     }, ".");foreach(@wanted_files){    print "$_\n"}

そして、それがどのように動作するか:

$ ./find_file.pl  "postgis-2.0.0"                                                       ./testdir/texts/postgis-2.0.0

パイソン

Pythonは、Ubuntuの世界で非常に広く使用されている別のスクリプト言語です。 特に、それは持っています os.walk() ディレクトリツリーをトラバースし、目的の文字列を含むファイルのリストを取得-私たちは上記と同じアクションを実行することを可能にするモジュー

ワンライナーとして、これは次のように行うことができます:

$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'                                                                         ['./testdir/texts/postgis-2.0.0']

完全なスクリプトは次のようになります:

#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."):    for i in f:        if "postgis-2.0.0" in i:            print(os.path.join(r,i))

$ find . -type f | grep IMG_20171225_*
与えます
./03-05--2018/IMG_20171225_200513.jpg
コマンドの後のドット find 出発点を述べることです,
したがって、現在のフォルダ,
名前フィルタを介して"パイプ"(=フィルタリング) IMG_20171225_*

コマンド`updatedb’を使用して、最初にlocatedbを更新するだけです

すでにインストールされている場合、新しいファイル名はもうpostgis-2.0.0ではないかもしれません。 通常、パッケージマネージャを介してインストールした後、実行可能ファイルはpost PATHフォルダのいずれかにあり、which postgisを試して場所を確認します。 何も返さない場合は、手動でファイルの場所を探す必要があります。