コマンドラインを使用してファイルの場所を特定したいと思います。私が試してみました:
find . -type f -name "postgis-2.0.0"
そして
locate postgis-2.0.0
無駄に。名前を指定して、ファイルのディレクトリを特定するコマンドは何ですか?
代わりにfind ~/ -type f -name "postgis-2.0.0"
を試してください。
.
を使用すると、現在のディレクトリのみが検索されます。 ~/
は、ホームディレクトリ全体(おそらくダウンロード先)を検索します。 wget
をルートとして使用した場合は、他の場所にある可能性があるため、/
を使用してファイルシステム全体を検索できます。
幸運を
私が試してみます:
Sudo find / -type d -name "postgis-2.0.0"
。現在のディレクトリでのみ検索することを意味します。本当に分からない場合は、ルートからすべてを検索するのが最善です。また、タイプ-fは、フォルダーではなくファイルの検索を意味します。 Sudo
を追加すると、すべてのフォルダー/サブフォルダーを検索できます。
locate
の構文は正しいですが、実行する必要がある場合があります
Sudo updatedb
最初。何らかの理由で、私はlocate
とは運がありません。
locate
は、updatedb
によって作成されたファイルとディレクトリのデータベースを使用します。したがって、新しいファイルをダウンロードした場合は、updatedb
がファイルとディレクトリのデータベースを更新していない可能性が高くなります。 locate
ユーティリティプログラムを使用する前に、Sudo updatedb
を使用できます。 updatedb
は通常、Linuxシステムで1日1回単独で実行されます。
findは、最も便利なLinux/Unixツールの1つです。
find . -type d | grep DIRNAME
を試してください
他の答えは良いですが、Permission denied
ステートメントを省略すると、より明確な答えが得られます(stderr
を実行しないため、Sudo
sは省略します)。
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 . -name "*file_name*"
を試してください
「。」(現在のディレクトリを調べる)を「/」(システム全体を調べる)または「〜/」(ホームディレクトリを調べる)に変更できます。
大文字と小文字を区別しない場合は、「-name」を「-iname」に変更できます。
ここで、「file_name "(何でも開始および終了できるファイル)」をファイルの正確な名前に変更できます。
これにより、ファイルの検索が簡単になります。
これにより、ファイルへのフルパスが得られます。
tree -f / | grep postgis-2.0.0
ツリーは、ディレクトリの内容をツリーのような形式でリストします。 -f
は、ファイルへのフルパスを与えるようにツリーに指示します。その場所や親の場所がわからないので、ファイルシステムのルート/
から再帰的に下向きに検索してください。次に、出力をgrepに送信して、Wordを強調表示しますpostgis-2.0.0
$ find . -type f | grep IMG_20171225_*
与える./03-05--2018/IMG_20171225_200513.jpg
コマンドfind
の後のDOTは、開始点を示すことです。
したがって、現在のフォルダー、
名前フィルターIMG_20171225_*
を介して「パイピング」(=フィルター済み)
find
コマンドは、ディレクトリツリーを再帰的にトラバースする最も簡単な方法ですが、他の方法もあります。特に、デフォルトでUbuntuに付属する2つのスクリプト言語には、すでにその機能があります。
bash
には非常に素晴らしいglobstar
シェルオプションがあり、ディレクトリツリーを再帰的にたどることができます。必要なのは、./**/*
展開のアイテムがファイルであるかどうか、および必要なテキストが含まれているかどうかをテストすることだけです。
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 Perl
use 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 python
import 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))