最近面試的時候碰到了shell中問到find的問題,因此今天總結一下find的用法
1、find的應用場景
2、find的使用方法和參數解析
1、find的應用場景
首先我們回答一下find的應用場景。我個人覺得find可以和grep來進行對比分析。find是用來查找文件或者目錄的,而grep是用來查找文件中的字符串的。
2、find的使用方法和參數解析
首先我們拋開書本,如果我們想要查找文件,都有哪些需求可以查找呢?我想不外乎以下這幾種,類型,名稱,大小,日期,權限。好的,find查找文件的方法基本上也不外乎這幾種。好的,接下來我們就分析一下它的參數。
2.1 find的程序表達式
在書本上我們看到find的程序表達式一般采用以下形式:
find [options] [path] [expression]的這種方案。舉個例子 find -L /home/linuxidc/linuxmi/ -name "*.js",-L(options)表達的是查找符號類型,/home/linuxidc/linuxmi/(path)查找路徑就不用多說了,-name "*.js"(expression)表達的是查找名字為結尾帶有js的文件。不過一般情況下我在使用時一般采用find [path] [expression]這種查找方式。原因有兩個:1、我個人覺得這樣比較好記。2、我個人認為options這個參數是完全可以省略的。
2.2 按照需求來進行find參數的使用
還記得我們之前寫的那些查找類型嗎?類型,名稱,大小,日期,權限。我們就依據這個架構來對其進行說明。
2.2.1 按照類型查找文件
還記得之前說過,options這個參數是可以完全省略的嗎?指的就是這里。正如我們之前所看到的那樣,其實options參數主要指的就是文件類型,而文件類型其實可以從之前所提過的type類型,我們編程中,一般遇到的類型有-f(file),-d(directory),-l(link),-c(字符設備),-b(塊設備),-p(命名管道),-s(socket套接字)等等。
所以我們如果需要按照類型查找文件:其形式為 find ./ -type f(查找當前目錄下中的所有文件)。其跟find -f ./是一樣的。
注意一下:這里后面的f是不加-的。
2.2.2 按照擴展名來查找文件
這種我認為是find命令中最常見的一種方式了,一般來說就是我們知道這個文件的文件名或者文件名的部分來進行搜索,當然,這里面是支持正則表達形式的。
find ./ -type f -name "*.sh"的,搜尋文件名中帶有.sh的文件。當然,這里正則表達式的使用方法不在細說,有興趣的可以看看我的另一篇博客。shell腳本之grep的使用方法 。
2.2.3 按照大小來查找文件
說實話,這種方法目前我還沒有用過,不過還是寫出來供大家參考吧。
它的基本形式和上面的兩種形式都差不多,舉例:find ./ -type f -size 1M,搜尋當前目錄下1M的文件,當然我們一般情況下會找大於1M或者小於1M的文件,那么我們就把1M改為+1M(大於1M)或者-1M(小於1M)就可以了。
2.2.4 按照權限來查找文件
介紹這種之前先介紹一下使用場景。我的代碼一般來說都是使用VS code來進行代碼書寫,但是這樣做有一個小問題,就是經常改完以后它的權限就從0644變成0755了,所以我必須查找到整個文件夾下到底有哪些文件是0755的權限。
介紹完場景以后,我們就來說一下如何使用好了。使用的基本形式和上面的兩種形式都差不多,舉例:find ./ -type f -perm 755,這樣就可以查找出該文件夾目錄中的755權限的目錄了。
2.2.5 補充說明
這里要說明一下,find命令有一點和grep命令不太一樣,就是它不用遞歸,grep如果查找下一級的文件目錄,那么就需要使用-r選項,但是find的話直接遞歸查找符合條件的文件。
總結:
本文一共介紹了兩個部分。
1、find的使用場景,簡單來說就是查找linux中的各類文件
2、根據查找文件的類型,名稱,大小,權限等選擇合適的參數來進行搜索。
