Linux查找文件方法

前言

locate 命令,快速查找
find 命令,深入查找

find 命令

與 locate 命令不同,find 命令不會在文件數據庫中查找文件的記錄,而是遍歷你的實際硬盤。

根據文件名查找

find -name "test.jpg"

-name 參數指定了文件名字,是 test.jpg,用雙引號括起來。不加雙引號或者用單引號也是可以的。

find /var/log -name "testlog"
何處:/var/log(及它的子目錄);
何物:testlog;
沒有指定"做什麼"參數,因此 find 命令默認顯示了查找到的文件。
find /var/log -name "testlog*"

*(星號)來實現匹配多個名稱

在整個硬盤裏查找

find / -name "testlog"

根據文件大小查找
我們可以查找 /var 中大小超過 10 MB 的文件(當然你要以 root 身份):

find /var -size +10M

表示查找小於 30 K 的文件:

find /var -size -30k

根據文件的最近訪問時間查找

近 7 天裏在家目錄中訪問過 JPG 格式的圖片:

find -name "*.jpg" -atime -7

-atime 參數後面緊跟的 -7 表示 7 天之內,減號表示小於。

sudo find . -name "new_file" -type d

如果不用 -type 參數指定類型,那麼 find 命令默認是同時查找目錄和文件的,加上d就只顯示目錄。

格式化打印查找結果

sudo find . -name "*.jpg" -printf "%p - %u\n"

我們在 -printf 參數後面寫了 “%p - %u\n”,這個格式字符串的意思如下:

%p :文件名;
:就是一個短橫;
%u :文件的所有者,這裏是我的用戶名,所以是 oscar;
\n :用於換行。

刪除查找到的文件

find -name "*.jpg" -delete

調用命令
使用 -exec 參數,可以後接一個命令,對每個查找到的文件進行操作。
假設我想要將當前目錄下所有查找到的 JPG 文件的訪問權限都改爲 777,那麼我們可以這樣做:

find -name "*.jpg" -exec chmod 777 {} \;

就是說對於每個找到的 .jpg 結尾的文件,都進行 -exec 參數指定的操作:

這個操作不必用雙引號括起來;
{} 會用查找到的每個文件來替換;
; 是必須的結尾。

locate 命令

這個命令用於定位要查找的文件,而且此命令很快。
查找一個叫做 test_file的文件

locate test_file

剛創建的文件,用 locate 命令查找不到,locate 命令不會對你實際的整個硬盤進行查找,而是在文件的數據庫裏查找記錄。

對於剛創建不久的文件,由於它們還沒被收錄進文件數據庫,因此 locate 命令就找不到其索引,自然就不會返回任何結果。

Linux 系統一般每天會更新一次文件數據庫。因此,只要你隔 24 小時再用 locate 查找,應該就能找到你剛創建的文件了。

當然我們也可以用 updatedb 命令強制系統立即更新文件數據庫,但是 updatedb 命令只能由 root 用戶執行。

sudo updatedb
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章