1. 程式人生 > >find命令總結

find命令總結

全部 普通 ech 所有權 fin 權限 查找文件 最大 中文

find命令:

用來在指定目錄下查找文件。任何位於參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。

語法:

find [路徑] [選項]

常用選項:

-amin<分鐘>:查找在指定時間曾被存取過的文件或目錄,以分鐘為單位計算

-atime<天>:查找在指定時間曾被存取過的文件或目錄,以24小時(天)為單位計算

-cmin<分鐘>:查找在指定時間之時被更改過的文件或目錄,以分鐘為單位計算

-ctime<天>:查找在指定時間之時被更改的文件或目錄,以24小時(天)為單位計算

-mmin<分鐘>:查找在指定時間曾被更改過的文件或目錄,以分鐘為單位計算

-mtime<天>:查找在指定時間曾被更改過的文件或目錄,以24小時(天)為單位計算

-depth:從指定目錄下最深層的子目錄開始查找

-maxdepth<目錄層級>:設置最大目錄層級

-mindepth<目錄層級>:設置最小目錄層級

-name<名稱>:指定字符串(文件名/目錄名)尋找文件或目錄;(-iname忽略大小寫)

-path<範本樣式>:指定字符串作為尋找目錄的範本樣式;(-ipath忽略大小寫)

-newer<參考文件或目錄>:查找其更改時間比指定文件或目錄的更改時間要新的文件或目錄

-perm<權限數值>:查找符合指定的權限數值的文件或目錄

-print:將匹配的文件或目錄輸出到標準輸出

-regex<正則>:指定正則字符串尋找文件或目錄;

-size<文件大小>:查找符合指定的文件大小的文件;不加單位默認為b(512字節);

(+表示大於;-表示小於;大小單位:c(1字節)/w(2字節)/b(512字節)/k/M/G...)

-type<文件類型>:只尋找符合指定的文件類型的文件

<文件類型> f:普通文件 l:鏈接文件 d:目錄 c:字符設備 b:塊設備

s:套接字 p:Fifo管道文件

-user<屬主>:查找符合指定的屬主的文件或目錄;(-nouser不屬於本地屬主;-uid)

-group<屬組>:查找符合指定屬組的文件或目錄;(-nogroup不屬於本地屬組;-gid)

-exec<執行指令>:find縮匹配的文件執行該指令;格式:-exec command {} \;

-ok<執行指令>:和-exec類似,但在執行指令前會詢問用戶是否確定執行

xargs:

find 命令把匹配到的文件傳遞給 xargs 命令,而 xargs 命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然後是下一批,並如此繼續下去


示例1:

1.列出當前目錄及子目錄下所有文件和文件夾

find .

2.在/home目錄下查找以.txt結尾的文件名;(忽略大小寫:-iname)

find /home -name "*.txt"

3.當前目錄及子目錄下查找所有以.txt和.pdf結尾的文件

find . -name "*.txt" -o -name "*.pdf"

4.匹配文件路徑或者文件

find /usr/ -path "*local*"

5.基於正則表達式匹配文件路徑;(忽略大小寫:-iregex)

find . -regex ".*\(\.txt\|\.pdf\)$"

6.找出/home下不是以.txt結尾的文件

find /home ! -name "*.txt"

7.向下最大深度限制為3的所有文件

find . -maxdepth 3 -type f

8.搜索最近七天內被訪問過的所有文件(-7表示7天內;+7表示超過7天)

find . -type f -atime -7

9.搜索訪問時間超過10分鐘的所有文件

find . -type f -amin +10

10.找出比file.log修改時間更新的文件

find . -type f -newer file.log

11.搜索大於10KB的文件

find . -type f -size +10k

12.刪除當前目錄下所有.txt文件

find . -type f -name "*.txt" -delete

13.當前目錄下搜索出權限為777的文件

find . -type f -perm 777

14.找出當前目錄下權限不是644的php文件

find . -type f -name "*.php" ! -perm 644

15.找出當前目錄用戶tom擁有的所有文件

find . -type f -user tom

16.找出當前目錄用戶組sunk擁有的所有文件

find . -type f -group sunk

17.找出當前目錄下所有root的文件,並把所有權更改為用戶tom

find .-type f -user root -exec chown tom {} \;

{} 用於與-exec選項結合使用來匹配所有文件,然後會被替換為相應的文件名

18.找出自己家目錄下所有的.txt文件並刪除

find $HOME/. -name "*.txt" -ok rm {} \;

19.查找當前目錄下所有.txt文件並把他們拼接起來寫入到all.txt文件中

find . -type f -name "*.txt" -exec cat {} \;> all.txt

20.將30天前的.log文件移動到old目錄中

find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

21.找出當前目錄下所有.txt文件並以“File:文件名”的形式打印出來

find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

22.查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk

find . -path "./sk" -prune -o -name "*.txt" -print

23.要列出所有長度為零的文件

find . -empty

24.列出當前目錄下所有文件的詳細信息

find . -type f -exec ls -l {} \;

25.在/logs 目錄中查找更改時間在 5 日以前的文件並刪除它們

find logs -type f -mtime +5 -exec rm {} \;

26.當前目錄中查找所有文件名以.log 結尾且更改時間在 5 日以上的文件;並

提示是否確定刪除

find . -name "*.conf" -mtime +5 -ok rm { } \;

27.查找當前用戶主目錄下的所有文件

find $HOME -print 或者 find ~ -print

28.讓當前目錄中文件屬主具有讀、寫權限,並且文件所屬組的用戶和其他用戶

具有讀權限的文件

find . -type f -perm 644 -exec ls -l { } \;

29.為了查找系統中所有文件長度為 0 的普通文件,並列出它們的完整路徑

find / -type f -size 0 -exec ls -l { } \;

30.查找/var/logs目錄中更改時間在7日前的普通文件,並在刪除前詢問它們

find /var/logs -type f -mtime +7 -ok rm { } \;

31.為了查找系統中所有屬於 root 組的文件

find . -group root -exec ls -l { } \;

32.刪除當目錄中訪問時間在 7 日以來、含有數字後綴的 admin.log文件(如admin.log123)

find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok rm { } \;

33.為了查找當前文件系統中的所有目錄並排序

find . -type d | sort

34.查找當前目錄下的每一個普通文件,然後使用 xargs 命令來測試它們分別屬於哪類文件

find . -type f | xargs file

35.查找當前目錄下所有txt文件 ,然後把結果保存到/tmp/txt.list 文件中

find / -name "*.txt" | xargs echo "" >/tmp/txt.list

36.在當前目錄下查找所有用戶具有讀、寫和執行權限的文件,並收回相應的寫權限

find . -perm -7 | xargs chmod o-w

37.用 grep 命令在所有的普通文件中搜索 hostname 這個詞

find . -type f | xargs grep "hostname"

38.當前目錄及子目錄中查找文件名以一個大寫字母開頭的文件

find . -name "[A-Z]*"

39.希望在/usr/local目錄下查找文件,但不希望在/usr/local/mysql 目錄下查找

find /usr/local -path "/usr/local/mysql" -prune -o -print

40.希望在/usr/local目錄下查找文件,但不希望在/usr/local/mysql和/usr/local/php目錄下查找

find /usr/local \( -path /usr/local/mysql -o -path /usr/local/php \) -prune -o -print

41.查找當前目錄下非root屬主的文件

find . ! -user root -type f

42.當前目錄查找更改時間比文件1.txt新但比文件2.txt舊的文件

find . -type f -newer 1.txt ! -newer 2.txt

43.在當前目錄下查找文件長度大於 1 M 字節的文件

find . -size +1000000c == find . -size +1M

44.在根目錄下開始查找名稱為passwd的文件

find / -name "passwd" -depth


find命令總結