web-dev-qa-db-ja.com

Locateコマンドはファイルのパスを見つけましたが、ファイルはそのパスに存在しません

私が書いた:

locate Origin90SR2DVD.iso

そして、私はそのファイルが置かれているパスを受け取りました:

/home/david/Origin90SR2DVD.iso

それから私は書いた:

cd /home/david

私は実行しました:

ls -lrth

Origin90SR2DVD.isoファイルが見つかりません。

ファイルがそのパスにないのはなぜですか?

5
Dave

locateOrigin90SR2DVD.iso)のデータベースファイルがcron(または自分)によって最後に更新されたときに、/home/davidファイルが/var/lib/mlocate/mlocate.dbの場所にあった可能性があります。 locateはデータベースファイル内のファイル名(高速であるため)であるため、検索中はliveではない手法と考えることができます。 。

locateはファイルの場所を示していますが、そこにファイルが存在しない可能性があります(削除されるか、他の場所に移動される可能性があります)。

何が起こっているのかを確認する方法は2つあります。

  • Sudo updatedblocateデータベースファイルを更新してから、同じlocateコマンドを実行できます。

  • または、findを使用して、live検索を実行できます。ホームディレクトリ内のファイルを再帰的に検索するには:

    find ~ -type f -iname 'Origin90SR2DVD.iso' -print -o -path ~/.gvfs -Prune
    

    -path ~/.gvfs -Prune(Eliah Kaganに感謝)を使用して、検索中に~/.gvfsディレクトリに降りないようにします。そうしないと、ディレクトリがルートによって所有されているため、気が散る許可拒否メッセージが表示されます。 -print -o -path ~/.gvfs -Pruneを削除することで、これを省略できます(メッセージを表示できます)。

    ファイルシステム階層内のすべての可能な場所を探すこともできます。ここでは、ファイルを格納できる場所をいくつか検討しましたが、ファイルが他のディレクトリにある場合は珍しいでしょう。

    Sudo find /home /root /opt /usr/local /mnt -type f -iname 'Origin90SR2DVD.iso'
    

編集:

locateのデータベースは、cronによって毎日更新されます。私のシステムでは、毎日午前6時25分に実行されています(/etc/crontabで確認してください)。

実際、anacroncronジョブを実行して、その時点でコンピューターがオフになっている場合、次回コンピューターがオンになった後にジョブが実行されるようにします。 anacronが使用できない場合、run-partsは、/etc/cron.dailyディレクトリ内のファイル(mlocateを含む)を指定の時間にのみ実行します。

5
heemayl

Sudo updatedbを実行して、mlocateデータベースが最新であることを確認します。

2
mkasberg