find 在linux系統中功能非常強大,根據各種給出的條件在系統搜索所需內容。
語法爲: find 路徑 -命令參數 [輸出形式]
這裏需要注意:路徑緊跟在命令之後
以下介紹具體用法:1, 查找按文件名:-name
find /etc -name passwd : 在etc目錄下查找名爲:passwd的目錄,軟鏈接,普通文件。。。。。
默認find將查找到的文件顯示出來。和-printf作用相同
find /etc -name "[0-9]*" :在etc目錄下查找文件名一數字開頭的文件
find /etc ! -name passwd: 在etc目錄下查找名不爲passwd的文件。
2,查找時指定查找的目錄層級:-maxdepth
find /etc -maxdepth 3 -name "[0-9]*" :在etc目錄及以下3層目錄中查找文件名以數字開頭的文件。
3,按修改時間進行查找:-mtime -mmin -atime -amin -ctime -cmin
find / -mtime +500 :查找系統中修改時間爲500天以前的文件
find / -mtime +500 :查找系統中修改時間爲500天當天修改的文件
find / -mtime -500 : 查找系統中修改時間爲500天以內修改的文件
find / -mmin -5 : 查找系統中修改時間爲5分鐘以內修改的文件
-atime -amin -ctime -cmin 與-mtime -mmin同理
4, 按文件權限來查找:-perm
-perm 後面跟的模式分爲3種:mode 、-mode、+mode
mode:完全匹配,如mode爲755轉換爲二進制位111 101 101,要求查找出來的文件權限的
二進制位必須一一對齊即爲755.
find /etc -perm 755 :在系統中查找文件權限爲755的文件。
-mode:表示mode轉換成二進制中1的文件權限必須匹配,如:644 二進制位110 100 100
要求查找的文件權限二進制必須爲11x,1xx,1xx,其中x位既可以爲0,也可以爲1.
也就是查找的文件權限必須包含-mode的權限二進制的中1的位置。如:110 110 110
、111 110 110、111 111 111、均匹配,101 100 100 就不匹配因爲前三位屬主權限
w的權限不匹配。
+mode:要求mode給出的權限二進制中含有1的位,任意一個匹配即可。-mode要求給出的
權限二進制中含有1的位都必須匹配,如:644轉換爲二進制位110 110 100
即、100 100 100、010 100 100、110 010 100、110 100 100 均匹配。
截圖待定
5,按屬主-user username,屬組查找-group groupname,無屬主-nouser,無屬組-nogroup
find /var -type f -user jjj :查找/var中屬主爲jjj的文件
find /home -type -group uuu01 :查找/home中屬組爲uuu01的文件
find /home -type -user jjj -group uuu01 :查找/home中屬主爲:jjj 屬組爲:uuu01的文件
find / -type f -nouser:查找系統無屬主的文件
由圖可見屬主名稱爲包含在/etc/passwd中用UID來顯示
find / -type f -nogroup :查找無屬組的文件
find / -type f -nouser -o -nogrop :查找無屬主文件或無屬組的文件。
6,按文件大小查找 :-size
-size 後面接三種模式的文件大小:
n:等於n的文件
+n :大於n的文件
-n :小於n的文件
另外:n如果指定單位(K M G)則按指定單位查找,若未指定單位,則默認單位爲塊
1塊爲512字節即 2048爲1M 1024*2*512byte=1024*1KB=1M
也指定單位爲c即爲字符 1024c=K 10240c=10K
find / -type f -size +1G :查找系統中大於1GB的文件
find / -type f -size 4096 :查找系統中大小爲2M的文件:4096*512byte=2M
7,按文件類型查找:-type d/f/b/c/p/l/s
8,參照文件新舊查找:-newer
find / -type f -newer ./i -exec ls -l {} \; :在系統查找比i文件更新的文件
-newer file1 ! file2 :查找更改時間比file1新但比file2舊的文件
9, -depth:查找文件時先查找當前目錄,在查找其他目錄。
10,-mount:在查找文件時不跨越文件系統mount點。
11, -follow:遇到符號鏈接文件時,跟蹤至鏈接所指向的文件。
12, -cpio:對匹配的文件使用cpio命令,將這些文件備份至磁帶設備中。
13, -fstype:查找位於某一文件系統中的文件,文件系統類型參考/etc/fstab
14,兩個條件同時滿足:-a 兩個條件滿足任意一個:-o
15,對查找後的內容進行操作:-exec -ok
-exec和-ok不同之處在於:-ok每次進行操作之前會詢問
16,查找排除目錄:-prune (如果同時制定了-depth,那麼-prune將忽略)
在Windows中可以在某些路徑中查找文件,也可以設定不在某些路徑中查找文件,下面用Linux中的find的命令結合其-path -prune參數來看看在Linux中怎麼實現此功能。
假如在當前目錄下查找文件,且當前目錄下有很多文件及目錄(多層目錄),包括dir0、dir1和dir2 ...等目錄及dir00、dir01...dir10、dir11...等子目錄。
1. 在當前目錄下查找所有txt後綴文件
find ./ -name *.txt
2.在當前目錄下的dir0目錄及子目錄下查找txt後綴文件
find ./ -path './dir0*' -name *.txt
3.在當前目錄下的dir0目錄下的子目錄dir00及其子目錄下查找txt後綴文件
find ./ -path '*dir00*' -name *.txt
4.在除dir0及子目錄以外的目錄下查找txt後綴文件
find ./ -path './dir0*' -a -prune -o -name *.txt -print
說明:-a 應該是and的縮寫,意思是邏輯運算符‘或’(&&); -o應該是or的縮寫,意思是邏輯運算符‘與’(||), -not 表示非.
命令行的意思是:如果目錄dir0存在(即-a左邊爲真),則求-prune的值,-prune 返回真,‘與’邏輯表達式爲真(即-path './dir0*' -a -prune 爲真),find命令將在除這個目錄以外的目錄下查找txt後綴文件並打印出來;如果目錄dir0不存在(即-a左邊爲假),則不求值-prune ,‘與’邏輯表達式爲假,則在當前目錄下查找所有txt後綴文件。
5.在除dir0、dir1及子目錄以外的目錄下查找txt後綴文件
find ./ /( -path './dir0*' -o -path './dir1*' /) -a -prune -o -name *.txt -print
注意:圓括號()表示表達式的結合。即指示 shell 不對後面的字符作特殊解釋,而留給 find 命令去解釋其意義。由於命令行不能直接使用圓括號,所以需要用反斜槓'/'進行轉意(即'/'轉意字符使命令行認識圓括號)。同時注意'/(','/)'兩邊都需空格。
6.在dir0、dir1及子目錄下查找txt後綴文件
find ./ /( -path './dir0*' -o -path './dir1*' /) -a -name *.txt -print
+1. 在所有以名爲dir_general的目錄下查找txt後綴文件
find ./ -path '*/dir_general/*' -name *.txt -print