歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux find命令詳述

Linux find命令詳述

日期:2017/2/28 14:22:29   编辑:Linux教程

find是Linux下最棒的命令之一,其查詢功能非常強大。以下將詳細介紹find的大多數用法:

工作方式:其沿著文件層次結構向下遍歷,匹配符合條件的文件,並執行相應的操作。

1.打印文件和目錄列表
$find . -print #打印文件和目錄列表

當使用-print時,'\n'作為用於分隔文件的定界符。
-print0指明使用'\0'作為定界符來打印匹配的每一個文件名。此方法對於文件名中含有'\n'是非常有效。
但在CentOS上經實際測試,find直接顯示匹配到的文件,不需要加上-print選項。
2.根據文件名或正則表達式匹配搜索
選項-name指定了文件名所必須配皮的字符串.

$find . -name "*.txt" -print # 打印以.txt結尾的文件
$find . -iname "*.txt" -print #-iname表示匹配的文件名忽略大小寫
3.條件限制,匹配多個條件中的一個
-a:表示且
-o:表示或
-not:表示非

$find . \( -name "*.txt" -o -name "*.pdf" \) -print #打印當前目錄下以.txt或.pdf結尾的文件
$find . \( -name "*.txt" -a -name "a*" \) -print #打印當前目錄下以a開頭且以.txt結尾的文件
$find . -not \( -name "*.txt" -a -name "a*" \) -print #打印當前目錄下不以a開頭或不以.txt結尾的文件
$find . -not \( -name "*.txt" -o -name "a*" \) -print #打印當前目錄下不以a開頭qie不以.txt結尾的文件
-not用法源於德摩根定律

-path:此參數用於將文件路徑作為一個整體進行匹配。

$find /home/user -path "*sh" -print
/home/user/bin/1.sh
/home/user/bash
-regex :此參數與-path類似,只不過其是基於正則表達式來匹配文件路徑的。
$find . -regex ".*\( \.py \| \.sh \)$"
4.否定參數
find也可以用“!”作為否定參數。

$find . ! -name ".txt" -print #匹配所有不以.txt結尾的文件</code></pre>
5.基於目錄的深度搜索
find命令在用時會遍歷所有的子目錄,我們可以采用一些參數來限制其遍歷的深度。

-maxdepth:最大深度限制,1表示只在當前目錄,2表示向下兩級。。。。。。
$find . -maxdepth 1 -type f -print #只列出當前目錄下的所有普通文件
-mindepth:最小深度限制,與上面用法相似。
$find . -mindepth 2 -type f -print #列出距當前目錄至少兩個子目錄的所有文件
6.根據文件類型搜索
linux下的文件類型
文件類型 類型參數
普通文件 f
符號文件 l
目錄 d
字符設備 c
塊設備 b
套接字 s
Fifo(管道文件) p

$find , -type f -print
$find . -type d -print
7.根據文件時間進行搜索
linux文件系統中的每個文件都有三種時間戳:
訪問時間(atime——access time):就是上次訪問這個文件的時間。
改變時間(ctime——change time):就是文件的inode改變的時間(什麼是inode?)當你往一個文件中添加數據或者刪除數據的時候,修改文件所有者的時候,鏈接改變的時候,文件的ctime就會發生改變。
修改時間(mtime——modification time):就是文件的內容上一次發生改變的時候的時間。
-atime,-ctime,-mtime可作為find的時間參數。單位是天,這些值通常還帶有+或-:+表示大於,-表示小於。

$find . -type f -atime -7 -print #打印7天內被訪問的文件
$find . -type f -atime 7 -print #打印恰好在7天前被訪問的文件
$find . -type f -atime +7 -print #打印超過7天沒被訪問的文件
上面的時間都是基於“天”,還有基於“分鐘”的。
-amin
-mmin
-cmin
用法與上相似,再次就不舉例了。
find的另一個漂亮的特性是-newer參數,我們可以指定一個用於比較時間戳的參考文件,然後找出比參考文件更新的所有文件。

$find . -type f -newer file.txt -print
8.基於文件大小的搜索

-size:用法與上相似
$find . -type f -size +2k #查找大於2k的文件
$find . -type f -size 2k #查找等於2k的文件
$find . -type f -size -2k #查找小於2k的文件</code></pre>
除了k之外,還有其他文件大小單元
b——塊(512字節)。
c——字節。
w——字。
k——千字節。
M——兆字節。
G——吉字節。
9.刪除匹配的文件

-delete參數可以實現此功能。
$find . -type f -name "*.swp" -delete
10.基於文件權限和所有權記性匹配

-perm:
$find . -type f -perm 644 -print #打印出權限為644的文件
-user:後可解用戶名或uid
$find . -type f -user root -print # 打印root用戶所擁有的文件
11.結合find執行命令或動作

-exec:此參數是find最強大的參數之一。
$find . -type f -name "*.c" -exec cat {} \; > file.txt #將所有c程序拼接起來寫入單個文件file.txt中
$find . -type f -mtime +10 -name "*.txt" -exec cp {} /tmp \; #將10天前的.txt文件復制到/tmp下
注:{}表示匹配到的文件。
12.讓find跳過特定的目錄

$find . \(-name ".git" -prune \) -o \( -type f -print \)
13.find與xargs結合使用

xargs:將標准輸入轉換成命令行參數。
$find . -type f -name "*.txt" -print0 |xargs -0 rm -f #將匹配到的文件刪除,xargs -0將 \0作為輸入定界符。
$find . -type f -name "*.c" -print0 | xargs -0wc -l #統計所有c程序文件的行數

Linux下查找文件find命令 http://www.linuxidc.com/Linux/2014-10/108575.htm

Linux下find命令詳解 http://www.linuxidc.com/Linux/2011-08/40669.htm

文本查找利器find的使用 http://www.linuxidc.com/Linux/2014-03/97559.htm

功能強大的find命令 http://www.linuxidc.com/Linux/2014-01/95236.htm

Linux系統find命令詳解 http://www.linuxidc.com/Linux/2014-06/103232.htm

Copyright © Linux教程網 All Rights Reserved