1. 程式人生 > >Linux文件查找介紹

Linux文件查找介紹

find locate linux

文件查找介紹:



在文件系統上查找符合條件的文件

locate:非實時查找,通過數據庫進行查找,效率高,可用於查找比較固定的文件

依賴於/var/lib/mlocate/mlocate.db這個數據庫文件,數據庫時間點之前創建的文件是可以查找到的,而時間點之後新創建的文件就搜索不到了

更新這個數據庫文件:一天更新一次,或者使用updatedb更新這個數據庫

模糊搜索:文件路徑中帶有要查找的字符串,就全搜出來了,搜索的文件全路徑

大小寫敏感

-i 用於忽略大小寫

-n 指定列出前幾行 locate -n3 profile

-r 使用正則表達式 locate -n3 -r "\.conf$"(查找包含conf結尾的前三個文件)


find:通過實時查找

實時查找工具,會搜索整個磁盤查找文件

語法:

find [option]...[查找路徑][查找條件][處理動作]

查找路徑:指定具體目標路徑;默認為當前目錄

查找條件:可以根據文件名,大小,類型,權限等標準進行查找,默認找出指定路徑下的所有文件

處理動作:對符合條件的文件做操作,默認輸出到屏幕

options:

指搜索層級,find命令默認搜索遞歸搜索,每個目錄都會進入

-maxdepth level 最大搜索目錄的深度,指定目錄為第1級,也包括比最大級小的目錄

-mindepth level 最小搜索目錄的深度,可以與maxdepth結合使用,精確到某一層

根據文件名和inode查找:

-name "文件名稱" :支持通配符 *,?,[],[^]

-iname 忽略文件名的大小寫

-inum "編號" 根據inode編號去查找文件

-samefile "文件名" 查找相同inode的文件

-inks n 鏈接數為n的文件

-regex "PATTERN(匹配整個文件的全路徑)"

根據屬主,屬組查找:

-user USERNAME:查找屬主為USERNAME的文件,可以與name選項一起用,當要查找屬主為USERNAME並且文件名為某些的時候可以一同使用

-group GRPNAME:查找屬組為GRPNAME

-uid UserID:查找屬主為指定的UID號的文件

-gid GroupID:查找屬組為指定的GID號的文件

-nouser:查找沒有屬主的文件

-nogroup:查找沒有屬組的文件

根據文件類型查找:

-type TYPE:

f:普通文件

s:套接字文件

d:目錄文件

l:符號鏈接文件

b:塊設備文件

c:字符設備文件

p:管道文件

特殊條件:

-prune:剪切的命令,比如說除了某個文件其余的都要,就把-prune寫在要剪切的命令後面

-path:指定的目錄,與-prune連起來使用

組合條件:

與:-a(默認不用寫,多個條件默認就是並且關系)

或:-o

非:-not,!

德丶摩根定律:

(不是A)or(不是B)=不是(A and B)

(不是A)and(不是B)=不是(A or B)

例子:

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

根據文件大小查找:

-size[+|-]

常用單位:k,M,G,c(byte)

數字:[-1]

如:6k表示(5k-6k),就是大於5k並且小於等於6k

- :[0,數字-1]

如:-6k表示[0-5k]

+ :[數字,未知]

如:+6k表示6k以上,不包括6k

根據時間為條件查找:

默認以天為單位

-atime[+|-]數字,

數字:[+1]

如:3天以上不到4天

+3:4天以上不包括3天

-3:0天到3天不包括3天

-mtime:以修改時間

-ctime:狀態修改時間

以分鐘為單位:

-amin

-mmin

-cmin

根據權限為條件查找:

-perm [/|-]MODE

MODE:精確匹配,比如find -perm 664 -type f,意思是搜索當前目錄下文件類型為普通文件並且權限為664

/MODE:任何一類(u,g,o)對象的權限中有一位能匹配即可,或者的關系,比如:find -perm /664 -type f,意思就是u,g,o任意以為擁有對應的權限就可以匹配

-MODE:表示的並且的關系,每個人都要有對應的權限,0代表不關心不作為搜索條件,比如:find -perm -644 -type,意思就是u,g,o都必須是對應的權限才能夠匹配


處理動作:

-print:打印到屏幕,默認行為

-ls:可以顯示出文件的屬性,相當於"ls -l",以長格式顯示

-delete:刪除查找到的文件(盡量不要使用)

-fls "文件名":將找到的文件以長格式方式存到一個文件中

-ok commond {}\; :對查找到的每個文件執行由commond指定的命令,對於每個文件執行命令之前,隊徽交互式要求用戶確認,不想要有確認的時候則將-ok改為-exec;比如:find -name "*.conf" -exec cp {} /root/{}.bak \; 就是將當前目錄下的所有conf文件備份到/root下面並且加上.bak為後綴,大括號代表查找到的內容,後面必須要跟"\;"


參數替換xargs

由於很多命令不支持管道來傳遞參數,而工作中又有使用的必要,所以就產生了xargs命令

有些命令不能處理過多的參數,命令執行時可能會失敗,xargs可以用來生成命令後方的參數,正好可以解決

示例:

ls f* | xargs rm (使用ls查出所有以f開頭的文件,一個個的傳給xargs進行rm處理)

find和xargs格式:find | xargs COMMAND 常見配合(find 搜索出來的文件,會一個一個傳給xargs,然後使用xargs後的命令處理)


Linux文件查找介紹