find 命令在文件系統中搜索文件和目錄。
find 命令用來在指定目錄下查找文件,在參數之前的任何字符串都會當作是目錄名。使用 find 命令時,如何不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件,並且將查找到的子目錄和文件全部顯示出來。
find 還是一個功能非常強大的用於處理 Linux 系統上文件的工具,它可以單獨查找文件,也可以與其他程序(命令)結合對需要處理的文件進行操作。
補充說明Linux文件類型:
f #普通文件
l #符號連接
d #目錄
c #字符設備
b #塊設備
s #套接字
p #FifoUNIX/Linux文件系統中的每個文件都有三種時間戳:
訪問時間 (-atime/天,-amin/分鐘):用戶最近一次訪問時間。修改時間 (-mtime/天,-mmin/分鐘):文件最後一次被修改的時間。變化時間 (-ctime/天,-cmin/分鐘):文件元數據(例如權限等)語法格式find [目錄路徑] [選項] [文件名]
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
選項說明-amin<分鐘>:#查找在指定時間內被存取過的文件或目錄,單位分鐘
-mmin<分鐘>:#查找在指定時間內被更改過的文件或目錄,單位分鐘
-mtime<24小時數>:#查找在指定時間內被更改過的文件或目錄,單位24小時
-atime<24小時數>:#查找在指定時間被寫入過的文件或目錄,單位24小時
-cmin<分鐘>:#查找在指定時間之內被更改過的文件或目錄
-ctime<24小時數>:#查找在指定時間之時被更改的文件或目錄,單位以24小時計算
-daystart:#從今天開始計算時間
-depth:#從指定目錄下最深層的子目錄開始查找
-exec<執行指令>:#如果find命令返回值為True,就執行該指令
-false:#將find命令返回值都設為False
-fstype<文件系統類型>:#只查找此指定文件系統類型下的文件或目錄
-gid<群組識別碼>:#查找匹配此群組識別碼的文件或目錄
-group<群組名稱>:#查找匹配此群組名稱的文件或目錄
-help或——help:#幫助信息
-links<連接數目>:#查找匹配指定的硬連接數目的文件或目錄
-maxdepth<目錄層級>:#設置查找的最大目錄層級
-mindepth<目錄層級>:#設置查找的最小目錄層級
-name<範本樣式>:#指定字符串作為尋找文件或目錄的範本
-path<範本樣式>:#指定字符串作為尋找目錄的範本樣式
-perm<權限數值>:#查找符合指定的權限數值的文件或目錄
-size<文件大小>:#查找符合指定的文件大小的文件
-true: #將find命令返回值都設為True
-type<文件類型>:#只查找匹配指定的文件類型的文件
-uid<用戶識別碼>:#只查找匹配指定的用戶識別碼的文件或目錄
-user<擁有者名稱>:#只查找匹配指定的擁有者名稱的文件或目錄
-version:#顯示版本信息
應用舉例當前目錄搜索所有文件,文件內容包含 「192.168.1.111」 的內容
find . -type f -name "*" | xargs grep "192.168.1.111"根據文件或者正則表達式進行匹配,查找需要的文件或目錄
#列出當前目錄及子目錄下所有文件和文件夾
[root@centos7 ~]# find .
#在/mingongge目錄下查找包含mingongge開頭的文件名
[root@centos7 ~]# find /mingongge -name "mingongge*.log"
/mingongge/mingongge_errors.log
/mingongge/mingongge.log
/mingongge/mingongge_test.log
#當前目錄及子目錄下查找所有以.txt和.log結尾的文件
[root@centos7 ~]# find . \( -name "*.txt" -o -name "*.log" \)
或
[root@centos7 ~]# find . -name "*.txt" -o -name "*.log"
#匹配文件路徑或者文件
[root@centos7 ~]# find /usr/ -path "*txt*"
#基於正則表達式匹配文件路徑
[root@centos7 ~]# find . -regex ".*\(\.txt\|\.log\)$"
#忽略大小寫
[root@centos7 ~]# find . -iregex ".*\(\.txt\|\.log\)$"find 否定參數用法舉例
#找出/mingongge下不是以.log結尾的文件
[root@centos7 ~]# find /mingongge ! -name "*.log"基於目錄深度搜索
#向下最大深度限制為5
[root@centos7 ~]# find . -maxdepth 5 -type f
#搜索出深度距離當前目錄至少3個子目錄的所有文件
[root@centos7 ~]# find . -mindepth 3 -type f根據文件時間戳進行查找
#查找最近10天內被訪問過的所有文件
[root@centos7 ~]# find . -type f -atime -10
#查找超過10天內被訪問過的所有文件
[root@centos7 ~]# find . -type f -atime +10
#查找訪問時間超過20分鐘的所有文件
[root@centos7 ~]# find . -type f -amin +20
#找出比mingongge修改時間更長的所有文件
[root@centos7 ~]# find . -type f -newer mingongge刪除查找到的匹配文件
#刪除當前目錄下所有.txt文件
[root@centos7 ~]# find . -type f -name "*.txt" -delete根據文件權限/所有權進行匹配:
#當前目錄下找出權限為777的文件
[root@centos7 ~]# find . -type f -perm 777#找出當前目錄下所有者是mingongge的所有文件
[root@centos7 ~]# find . -type f -user mingongge
#找出當前目錄下用戶組為mingongge的所有文件
[root@centos7 ~]# find . -type f -group mingongge #找出當前目錄下權限不是644的.log文件
[root@centos7 ~]# find . -type f -name "*.log" ! -perm 644find 和 -exec 選項結合使用
#找出當前目錄下所有者為root的文件,並把所有者更改為mingongge這個用戶
[root@centos7 ~]# find .-type f -user root -exec chown mingongge {} \;
#找出當前用戶家目錄下所有的.log文件並執行刪除動作
[root@centos7 ~]# find $HOME/. -name "*.log" -exec rm {} \;
#查找當前目錄下所有.log文件並將他們拼接起來然後寫入到mingongge.txt這個文件中
[root@centos7 ~]# find . -type f -name "*.log" -exec cat {} \;> /mingongge.txt
#查找出10天前的.log文件,然後全部移動到mingongge目錄下
[root@centos7 ~]# find . -type f -mtime +10 -name "*.log" -exec cp {} mingongge \;
#找出當前目錄下所有.log文件,然後以「File:文件名」的格式列印輸出到屏幕上
[root@centos7 ~]# find . -type f -name "*.log" -exec printf "File: %s\n" {} \;根據文件大小來查找目標文件
#查找當前目錄下文件大小超過500M的文件
[root@centos7 ~]# find . -type f -size +500M
./mingongge/backup_file.tar.gz
./mingongge/upload.tar.gz
#查找當前目錄超過500M的文件,並列印出文件的詳細屬性信息
[root@centos7 ~]# find . -type f -size +800M -print0 | xargs -0 ls -l
-rw-r--r-- 1 root root 4250099200 Apr 15 2019 ./mingongge/backup_file.tar.gz
-rw-r--r-- 1 root root 6832225765 Oct 14 12:57 ./mingongge/upload.tar.gz
#查找當前目錄超過500M的文件,並列印出文件的具體大小
[root@centos7 ~]# find . -type f -size +500M -print0 | xargs -0 du -h|sort -nr
6.8G ./mingongge/upload.tar.gz
4G ./mingongge/backup_file.tar.gz查找系統中前5的大文件
# find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 5
1.1G /download/ubuntu-17.04-desktop-amd64.iso
377M /download/app_backup.tar.gz
100M /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap方法有很多種,都需要與其它命令配合使用,才能查找出來。
find 命令在文件查找及其它的應用方面具有強大的功能,學習系統命令,find 命令是需要重點掌握的,不管是平時的學習,還是日後工作中,這個命令都有著非常重要的作用。