一、概述
find 子產品可以幫助我們在被管理主機中查找符合條件的檔案,就像 find 指令一樣。
二、常用參數
paths參數 :必須參數,指定在哪個目錄中查找檔案,可以指定多個路徑,路徑間用逗号隔開,此參數有别名,使用别名 path 或者别名 name 可以代替 paths。
recurse參數 : 預設情況下,隻會在指定的目錄中查找檔案,也就是說,如果目錄中還包含目錄,ansible 并不會遞歸的進入子目錄查找對應檔案,如果想要遞歸的查找檔案,需要使用 recurse 參數,當 recurse 參數設定為 yes 時,表示在指定目錄中遞歸的查找檔案。
hidden參數 :預設情況下,隐藏檔案會被忽略,當 hidden 參數的值設定為 yes 時,才會查找隐藏檔案。
file_type參數 : 預設情況下,ansible 隻會根據條件查找”檔案”,并不會查找”目錄”或”軟連結”等檔案類型,如果想要指定查找的檔案類型,可以通過 file_type 指定檔案類型,可指定的檔案類型有 any、directory、file、link 四種。
patterns參數 : 使用此參數指定需要查找的檔案名稱,支援使用 shell(比如通配符)或者正規表達式去比對檔案名稱,預設情況下,使用 shell 比對對應的檔案名,如果想要使用 python 的正則去比對檔案名,需要将 use_regex 參數的值設定為 yes。
use_regex參數:預設情況下,find 子產品不會使用正規表達式去解析 patterns 參數中對應的内容,當 use_regex 設定為 yes 時,表示使用 python 正則解析 patterns 參數中的表達式,否則,使用 glob 通配符解析 patterns 參數中的表達式。
contains參數:使用此參數可以根據文章内容查找檔案,此參數的值為一個正規表達式,find 子產品會根據對應的正規表達式比對檔案内容。
age參數 :使用此參數可以根據時間範圍查找檔案,預設以檔案的 mtime 為準與指定的時間進行對比,比如,如果想要查找 mtime 在3天之前的檔案,那麼可以設定 age=3d,如果想要查找 mtime 在3天以内的檔案,可以設定 age=-3d,這裡所說的3天是按照目前時間往前推3天,可以使用的機關有秒(s)、分(m)、時(h)、天(d)、星期(w)。
age_stamp參數 :檔案的時間屬性中有三個時間種類,atime、ctime、mtime,當我們根據時間範圍查找檔案時,可以指定以哪個時間種類為準,當根據時間查找檔案時,預設以 mtime 為準。
size參數 :使用此參數可以根據檔案大小查找檔案,比如,如果想要查找大于3M的檔案,那麼可以設定 size=3m,如果想要查找小于50k的檔案,可以設定 size=-50k,可以使用的機關有 t、g、m、k、b。
get_checksum參數 :當有符合查找條件的檔案被找到時,會同時傳回對應檔案的 sha1校驗碼,如果要查找的檔案比較大,那麼生成校驗碼的時間會比較長。
三、示例
在 ansible-demo3 主機的 /testdir目錄中查找檔案内容中包含 abc 字元串的檔案,隐藏檔案會被忽略,不會進行遞歸查找。
ansible ansible-demo3 -m find -a 'paths=/testdir contains=".*abc.*" '
在 ansible-demo3 主機的 /testdir 目錄以及其子目錄中查找檔案内容中包含 abc 字元串的檔案,隐藏檔案會被忽略。
ansible ansible-demo3 -m find -a 'paths=/testdir contains=".*abc.*" recurse=yes '
在 ansible-demo3 主機的 /testdir 目錄中查找以 .sh 結尾的檔案,包括隐藏檔案,但是不包括目錄或其他檔案類型,不會進行遞歸查找。
ansible ansible-demo3 -m find -a 'paths=/testdir patterns="*.sh" hidden=yes'
在 ansible-demo3 主機的 /testdir 目錄中查找以 .sh 結尾的檔案,包括隐藏檔案,包括所有檔案類型,比如檔案、目錄、或者軟連結,但是不會進行遞歸查找。
ansible ansible-demo3 -m find -a 'paths=/testdir patterns="*.sh" file_type=any hidden=yes'
在 ansible-demo3 主機的 /testdir 目錄中查找以 .sh 結尾的檔案,隻不過 patterns 對應的表達式為正規表達式,查找範圍包括隐藏檔案,包括所有檔案類型,但是不會進行遞歸查找,不會對 /testdir 目錄的子目錄進行查找。
ansible ansible-demo3 -m find -a 'paths=/testdir patterns=".*\.sh" use_regex=yes file_type=any hidden=yes'
在 ansible-demo3 主機的 /testdir 目錄中以及其子目錄中查找 mtime 在1天以内的檔案,不包含隐藏檔案,不包含目錄或軟連結檔案等檔案類型。
ansible ansible-demo3 -m find -a "path=/testdir age=-1d recurse=yes"
在 ansible-demo3 主機的 /testdir 目錄中以及其子目錄中查找大于 2g 的檔案,不包含隐藏檔案,不包含目錄或軟連結檔案等檔案類型。
ansible ansible-demo3 -m find -a "paths=/testdir size=2g recurse=yes"
在 ansible-demo3 主機的 /testdir 目錄中以及其子目錄中查找以 .sh 結尾的檔案,并且傳回符合條件檔案的 sha1 校驗碼,包括隐藏檔案。
ansible ansible-demo3 -m find -a "paths=/testdir patterns=*.sh get_checksum=yes hidden=yes recurse=yes"