16.04 Locate 在 /mnt 中找不到文件

16.04 Locate 在 /mnt 中找不到文件

我安裝了 16.04,其中“下載”資料夾指向輔助硬碟(顯示Downloads -> /mnt/data/Downloads)。當我運行locate搜尋文件時,它沒有顯示該驅動器上的任何文件。我已經運行sudo updatedb並檢查了我的updatedb.conf(我看到的任何內容都沒有排除/mnt我正在查找的目錄或文件)

對我來說有趣的是當我cd /mnt/data/Downloads跑步時定位我可以看到該目錄中的所有內容,但看不到主磁碟機上的內容。這幾乎就像 Ubuntu 有兩個不同的定位資料庫,這取決於我所在的磁碟機。

我該如何補救這種情況?

額外的: 這是我的updatedb.conf

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"

我嘗試跑步sudo locate,但這並沒有改變結果。我嘗試跑步mlocatesudo mlocate但這也沒有改變結果。

我還嘗試查找另一個updatedb.conf文件,但結果是空的。

更新1:輔助驅動器上的檔案系統是 ext4。

更新2:也沒有什麼加密的。我一直在谷歌上搜尋並注意到這對某些用戶來說是一個問題。

更新3:我現在更困惑了。我正在嘗試查找我的計算機上的所有 .iso 文件,結果如下:

@:~$ 找到 FreeNAS

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

@:~$ 定位*.iso

/home/hudsona/ubuntu-16.04.1-server-amd64.iso

@:~$ 定位 iso

/home//ubuntu-16.04.1-server-amd64.iso

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

(以及一堆其他結果)

@:~$ 找到 . -類型 f -名稱“*.iso”

./ubuntu-16.04.1-伺服器-amd64.iso

更新4:更多結果:sudo find / -type f -name "*.iso"給了我想要的結果,但需要很長時間才能返回這些結果。

我想深入研究一下,看看我是否確實有兩個不同的資料庫,因為根據我所在的驅動器,我得到了不同的定位結果。這是我的結果:

  • /usr/share/man/man5/mlocate.db.5.gz
  • /var/lib/mlocate/mlocate.db
  • /var/lib/mlocate/mlocate.db.VEzhqO

我認為 .VEzhqO 檔案可能是輔助資料庫,因此我嘗試使用定位命令的 -d 標誌來指定它。這給了我“無法統計”錯誤。謎團還在繼續。

更新5:我在另一台 Ubuntu 機器 16.04 伺服器版本上複製了這個。

更新6:所以我有一個解決方案,找到“*.iso”,但現在我很好奇“為什麼”有效。我查看了 MAN 頁面和這兩個連結:http://www.linfo.org/locate.htmlhttp://www.howtogeek.com/112674/how-to-find-files-and-folders-in-linux-using-the-command-line/。這些都沒有闡明為什麼會起作用。

答案1

在所有 shell 中,使用*.iso在呼叫命令之前會擴展為檔案列表,因此在

locate *.iso

shell 自動擴展表達式,從目前目錄中的檔案建立檔案名稱清單。假設目前目錄中有兩個 iso 檔案file1.isofile2.iso;結果命令實際上是:

locate file1.iso file2.iso

然後 shell 就會執行它。因此,locate將嘗試查找包含這兩個字串的文件,有效地搜尋"*file1.iso*""*file2.iso*"

這就是為什麼locate iso查找的文件多於locate *.iso;實際上是在第一種情況下locate尋找。"*iso*"解決方案(以及正確的使用方法,恕我直言)是在命令接受使用它們的表達式時引用 shell 的特殊字符,例如以下find命令:

find /etc/ -type f -iname "*.conf"

如果當前目錄中有兩個或多個conf檔案並且我們不使用引號,則find命令將無法解析生成的第二個檔案名,並且我們的頭髮密度將在絕望和Google搜尋中嚴重減少;D因為錯誤訊息似乎與缺少引號無關。

答案2

因為某些原因,

locate *.iso 

只搜尋目前目錄中的 .iso 文件,而

locate "*.iso" 

搜尋您的所有磁碟機。但這是我的問題的解決方案。

答案3

定位會自動應用於*字串之前和之後,因此最簡單的解決方案是:

locate .iso

我還安裝了兩個 Windows 磁碟機。當locate從 Ubuntu 分割區運行時,我得到與你的問題類似的結果。使用這個答案可以獲得正確的結果:

───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate "*.iso" | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate *.iso | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate .iso | wc -l
45

相關內容