1. 程式人生 > >Linux- find命令的例子

Linux- find命令的例子

例項

根據檔案或者正則表示式進行匹配

列出當前目錄及子目錄下所有檔案和資料夾
find .

在/home目錄下查詢以.txt結尾的檔名
find /home -name "*.txt"

同上,但忽略大小寫
find /home -iname "*.txt"

當前目錄及子目錄下查詢所有以.txt和.pdf結尾的檔案
find . \( -name "*.txt" -o -name "*.pdf" \)

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

匹配檔案路徑或者檔案
find /usr/ -path "*local*"

基於正則表示式匹配檔案路徑
find . -regex ".*\(\.txt|\.pdf\)$"

同上,但忽略大小寫
find . -iregex ".*\(\.txt|\.pdf\)$"

否定引數

找出/home下不是以.txt結尾的檔案
find /home ! -name "*.txt"

根據檔案型別進行搜尋

find . -type 型別引數

型別引數列表:

f  普通檔案
d  目錄 
c  字元裝置 
b  塊裝置 
s  套接字 
p  Fifo

根據檔案時間戳進行搜尋

find . -type f 時間戳
UNIX/Linux檔案系統每個檔案都有三種時間戳:

  • 訪問時間(-atime/天,-amin/分鐘):使用者最近一次訪問時間。
  • 修改時間(-mtime/天,-mmin/分鐘):檔案最後一次修改時間。
  • 變化時間(-ctime/天,-cmin/分鐘):檔案資料元(例如許可權等)最後一次修改時間。

搜尋最近七天內被訪問過的所有檔案
find . -type f -atime -7

搜尋恰好在七天前被訪問過的所有檔案
find . -type f -atime 7

搜尋超過七天內被訪問過的所有檔案
find . -type f -atime +7

搜尋訪問時間超過10分鐘的所有檔案
find . -type f -amin +10

找出比file.log修改時間更長的所有檔案
find . -type f -newer file.log

根據檔案大小進行匹配

find . -type f -size 檔案大小單元

檔案大小單元:

b —— 塊(512位元組)
c —— 位元組
w —— 字(2位元組)
k —— 千位元組
M —— 兆位元組
G —— 吉位元組

搜尋大於10KB的檔案
find . -type f -size +10k

搜尋小於10KB的檔案
find . -type f -size -10k

搜尋等於10KB的檔案
find . -type f -size 10k

刪除匹配檔案

刪除當前目錄下所有.txt檔案
find . -type f -name "*.txt" -delete

根據檔案許可權/所有權進行匹配

當前目錄下搜尋出許可權為777的檔案
find . -type f -perm 777

找出當前目錄下許可權不是644的php檔案
find . -type f -name "*.php" ! -perm 644

找出當前目錄使用者tom擁有的所有檔案
find . -type f -user tom

找出當前目錄使用者組sunk擁有的所有檔案
find . -type f -group sunk

藉助-exec選項與其他命令結合使用

找出當前目錄下所有root的檔案,並把所有權更改為使用者tom
find .-type f -user root -exec chown tom {} \;
上例中,{}用於與-exec選項結合使用來匹配所有檔案,然後會被替換為相應的檔名。

找出自己家目錄下所有的.txt檔案並刪除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok和-exec行為一樣,不過它會給出提示,是否執行相應的操作。

查詢當前目錄下所有.txt檔案並把他們拼接起來寫入到all.txt檔案中
find . -type f -name "*.txt" -exec cat {} \;> all.txt

將30天前的.log檔案移動到old目錄中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

找出當前目錄下所有.txt檔案並以“File:檔名”的形式打印出來
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

因為單行命令中-exec引數中無法使用多個命令,以下方法可以實現在-exec之後接受多條命令
-exec ./text.sh {} \;

搜尋但跳出指定的目錄

查詢當前目錄或者子目錄下所有.txt檔案,但是跳過子目錄sk
find . -path "./sk" -prune -o -name "*.txt" -print

find其他技巧收集

要列出所有長度為零的檔案
find . -empty