如何快速學習find命令
如何快速學習find命令
每一種操作系統(tǒng)都有成千上萬的文件組成,對于linux這樣“一切皆文件”的操作系統(tǒng)來說更不例外,大家應該都能很輕松使用windows下的文件查找功能,下面跟著學習啦小編一起來了解一下如何快速學習find命令吧。
如何快速學習find命令
讓我們先從一個簡單例子開始。
$ find / -name test
。/backup/ modules/field/modules/test
$
“查找根目錄下名稱為’test’的文件”, 這條命令會讓系統(tǒng)查找所有文件, 包括掛載的文件設備。 這可能需要花費一段時間, 尤其是查找網絡共享硬盤。 不過, 我們可以通過參數(shù)-mount告訴, 系統(tǒng)忽略掛載設備:
$ find / -mount -name test
find命令格式如下:
find [path] [options] [tests] [actions]
[path]
路徑; 應該不難理解。 這里可以使用絕對路徑, 也快成使用相對路徑。
[options]
參數(shù); 比較常用的參數(shù)用:
-depth: 先查找子目錄再查看當前目錄 -follow: 跟蹤查找連接文件 -maxdepths N: 子目錄遞歸最大深度 -mount(or -xdev): 忽略掛載文件
[tests]
條件匹配;
-atime -N/N/+N: 最后一次訪問文件的時間在 N天內/N天/N天前 -mtime -N/N/+N: 最后一次修改文件的時間在 N天內/N天/N天前 -name pattern: 與pattern相匹配的文件(包括目錄) -newer f1 !f2: 比文件f1新的文件, 比文件f2舊的文件 -type b/d/c/p/l/f: 文件類型為: 塊設備/目錄/字符設備/管道/鏈接/文件 -user username: 文件的所有者是username
我們可以通過以下操作符, 將匹配條件 連起來:
-not (!): 方向匹配 -and (-a): 而且 -or (-o): 或者
我們還可以通過括號將一些匹配符號合并。 例如
\(-newer -o -name ‘*test’ \)
現(xiàn)在舉一個稍微有點復雜的例子, 查找當天被訪問過或修改過的文件, 文件名包含’python’, 而起文件所有者是’anthony’:
# find / \( -atime -1 -or -mtime -1 \) -and -name ‘*python*’ -and -user ‘anthony’
/home/anthony/svn_code/subversion-1.7.2/subversion/bindings/swig/python
/home/anthony/svn_code/subversion-1.7.2/subversion/bindings/ctypes-python
/home/anthony/python
/home/anthony/python/Python-3.2.2/build/temp.linux-x86_64-3.2/home/anthony/python
/home/anthony/python/Python-3.2.2/Tools/unicode/python-mappings
/home/anthony/.local/lib/python3.2
#
[actions]
操作;
-exec command: 執(zhí)行命令, 具體介紹見后文。 -ok command: 和-exec一樣, 除了命令執(zhí)行需要用戶許可。 -print: 打印文件名 -ls: 列出文件詳細信息
現(xiàn)在舉例說明-exec command
anthony@z:~$ find -mtime -1 -type f -exec ls -l {} \;
-rw-r--r-- 1 anthony anthony 0 Apr 5 12:04 。/search/search.txt
-rw------- 1 anthony anthony 22997 Apr 5 12:04 。/.viminfo
-rw------- 1 anthony anthony 125 Apr 5 14:25 。/.lesshst
anthony@z:~$
簡單地說, -exec或-ok, 將查詢到的文件作為參數(shù)傳遞給后面的命令執(zhí)行, 而參數(shù)的位置用{}標識, 即命令中, “{}”替換成find查找出來的文件名, 最后”\;”表示結束符。
find . -type f -exec ls -l {} \;
從當前文件夾中查找普通文件,并且對每個匹配的文件執(zhí)行“ls -l {}”操作;
-type表示按照文件類型來查找文件:
b - 塊設備文件。
d - 目錄。
c - 字符設備文件。
p - 管道文件。
l - 符號鏈接文件。
f - 普通文件。
find logs -type f -mtime +5 -exec rm {} \;
從logs文件夾中查找最后修改日期在5天前的文件,并且刪除它們;
-mtime:Modify Time
-atime: Access Time
-ctime: Create Time
find /etc -name "passwd*" -exec grep "sam" {} \;
從/etc文件夾中查找文件名以“passwd”開頭的所有文件中,是否有“sam”字符串;
-name 后面的表達式不是正則表達式,而是通配符,“*.txt”,"*[lL]inux*"等等。
主要選項:
-name:按照文件名查找文件。
-perm:按照文件權限來查找文件。
-prune:使用這一選項可以使f i n d命令不在當前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被f i n d命令忽略。
-user: 按照文件屬主來查找文件。
-group:按照文件所屬的組來查找文件。
-mtime -n +n:按照文件的更改時間來查找文件, - n表示文件更改時間距現(xiàn)在n天以內,+ n表示文件更改時間距現(xiàn)在n天以前。F i n d命令還有- a t i m e和- c t i m e選項,但它們都和- m t i m e選項。
-nogroup:查找無有效所屬組的文件,即該文件所屬的組在/ e t c / g r o u p s中不存在。
-nouser:查找無有效屬主的文件,即該文件的屬主在/ e t c / p a s s w d中不存在。
-newer file1 ! file2:查找更改時間比文件f i l e 1新但比文件f i l e 2舊的文件。
-type 查找某一類型的文件
-size 按文件大小查找,+100c,表示大于100字節(jié),-10,表示小于10塊(1塊為512字節(jié))
上面就是Linux find命令的介紹了,從例子中學習find命令效果會比看理論知識會好的多,對于初學者來說,多看例子多動手是很有必要的。