コマンドラインを使用してファイルの場所を特定したいと思います。 私は試しました:
find . -type f -name "postgis-2.0.0"
と
locate postgis-2.0.0
無駄に。 ファイルの名前を指定して、ファイルのディレクトリを決定するコマンドは何ですか?
コマンドラインを使用してファイルの場所を特定したいと思います。 私は試しました:
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
文は私に明確な答えを与えます(省略 stderr
sが実行されていないため 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には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
を試して場所を確認します。 何も返さない場合は、手動でファイルの場所を探す必要があります。