日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

find 命令_Linux下查找文件:find 命令

發(fā)布時間:2023/12/15 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 find 命令_Linux下查找文件:find 命令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

find命令用于在指定目錄中根據(jù)tests測試條件搜索符合tests測試條件的文件

概要

該命令的形式如下:

[-H

第一次看到該命令的人可能會被其復雜繁多的選項參數(shù)嚇到。其實在日常開發(fā)中,很多選項并不多見。所以上述命令格式可以簡化如下:

[path...

Path

即為查找文件的路徑,命令將在指定目錄及其子目錄下進行查找文件,默認為當前路徑

Expression

表達式,由option選項、test測試條件、action動作組成。option選項,均返回true。test測試條件即為當前文件的判定條件,其返回true/false;action動作是作用于當前文件的動作,其同樣返回true/false。

如果在表達式中除了-prune外無其他action。則默認對整個表達式結(jié)果為true的文件執(zhí)行 -print 動作,而不是直接在后面添加-print。 示例如下:

操作符

通常在表達式會包含多個option、test、action,如下代碼 code 1 處所示。當未顯式指定操作符時,默認為 "-a" (即AND)操作符,故其命令的完整形式為code 2處所示

'./subTest' -iname

常用操作符如下:

  • expr1 -a expr2 : AND 邏輯與,使用短路求值。亦可寫為expr1 -a expr2。如果 expr1 結(jié)果為 false,expr2 將不會被執(zhí)行
  • expr1 -o expr2 : OR 邏輯或,使用短路求值。如果 expr1 結(jié)果為 true,expr2 將不會被執(zhí)行
  • ( expr ) : 由于 AND 邏輯與的優(yōu)先級 高于 OR 邏輯或的優(yōu)先級。故,可以通過添加括號改變默認的操作符優(yōu)先級。需要注意的是,命令中的左右括號需要使用反斜杠進行轉(zhuǎn)義。即,( expr )
  • ! expr : NOT 邏輯非。對expr的結(jié)果進行取反

示例如下:

Tests 測試條件

在日常開發(fā)中,tests 測試條件最為常用,現(xiàn)對常用的測試篩選項進行介紹:

根據(jù)文件名查找文件

根據(jù)文件名來查找文件,這也是日常最常用的:

# 大小寫敏感 -iname <filename>

其中,文件名參數(shù)可以使用Linux的文件名通配符,注意其不是正則

根據(jù)文件權(quán)限

根據(jù)文件(Linux下,目錄也屬于文件)權(quán)限來篩選文件,其有3種匹配模式

# 嚴格匹配所給權(quán)限-perm -num
  • 嚴格匹配

其將嚴格匹配所給權(quán)限的0和1設(shè)置,即結(jié)果文件的權(quán)限碼必須和給定權(quán)限碼num完全一致

-perm num

  • 滿足所給全部權(quán)限位即可

對于給定權(quán)限碼num,文件全部滿足給定的權(quán)限位即可,對于多余的權(quán)限位并不敏感

-perm -num

  • 滿足所給任一權(quán)限位即可

對于給定權(quán)限碼num,文件若存在任一一個滿足給定的權(quán)限位即可,對于多余的權(quán)限位并不敏感

-perm /num

排除某個目錄

查找文件時,如果已經(jīng)知道某個目錄下不存在我們所需文件,可以在find中指定排除,以免浪費時間搜索。下述命令中的-path test條件用來判定是否存在指定路徑。如果是,則其返回true,并根據(jù)邏輯與的短路求值策略繼續(xù)執(zhí)行-prune action動作,用于排除該路徑

-path pathName -prune-path pathName -a -prune
  • 示例1

1處查看檢索當前目錄下所有的內(nèi)容,而2處則是查看除subTest目錄外的文件

相信這里會讓人疑惑的地方在于 -print 前面的 -o 或操作符,根據(jù)前文所述,-path ./subTest -a -prune 用于排除指定目錄,然后-print是查看剩下的文件,中間應該是用 -a 與操作符來連接啊。好,那我們先將上面代碼中的 -o -print 改為 -a -print。來看看會發(fā)生什么

咦?這里竟然輸出的結(jié)果是不是讓人很吃驚…………竟然是我們需要排除的目錄。其實,問題是在于我們沒有理清find命令的執(zhí)行邏輯,find是對path下的所有文件(目錄文件夾也是文件的一種)依次去執(zhí)行表達式,根據(jù)test條件的結(jié)果來判定是否執(zhí)行action。對于本例而言,當對subTest目錄進行判定時,-path ./subTest 測試條件結(jié)果肯定為true,然后執(zhí)行-prune以不對該目錄下的文件進行遍歷搜索測試,其是一個action且結(jié)果恒為真。如果此時后面如果是-a -print,則對當前測試的文件(即,subTest目錄)執(zhí)行打印動作,而遍歷其他文件(比如,bers文件)進行測試時,-path ./subTest 測試條件結(jié)果為false,根據(jù)短路求值策略,均不會執(zhí)行 -prune動作和-print動作,故最終我們看到的輸出結(jié)果,只有./subTest目錄文件;同理,如果后面是-o -print的話,測試 ./subTest 目錄文件時,-path ./subTest -prune 結(jié)果為true,由于后面是-o 與操作符,根據(jù)短路求值策略,其將不會執(zhí)行-print動作,而遍歷其他文件(比如,bers文件)進行測試時,-path ./subTest 測試條件結(jié)果為false,根據(jù)短路求值策略,其將不會執(zhí)行-prune動作,且 -path ./subTest -prune結(jié)果為false。而對于-print動作而言,由于其前面為 -o 或操作符,將會執(zhí)行-print動作,即打印當前測試文件(比如,bers文件)

  • 示例2

按名查找并排除指定目錄

-a、-o 優(yōu)先級

如前文所述,-a 與操作符優(yōu)先級高于 -o 或操作符優(yōu)先級。所以如果不注意這點,很容易會產(chǎn)生Bug。例如,我們期望找到名為 bers 或 numbers.txt 文件,代碼如下:

從上文執(zhí)行的結(jié)果,可以看到?jīng)]有成功查找出bers文件,原因很簡單,由于 -a 優(yōu)先級比 -o 高,-print 動作只會在-iname 'numbers.txt' 測試條件返回true時執(zhí)行。所以上述命令等價于下圖所示

同理,即使將numbers.txt換為一個不存在的文件名 abc ,也同樣不會輸出存在的bers文件

所以,對于該問題,需要通過添加括號來改變操作符的默認優(yōu)先級,使其滿足我們的需求

總結(jié)

以上是生活随笔為你收集整理的find 命令_Linux下查找文件:find 命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。