昨日推薦:天天學一個 Linux 命令(19):rmlinux
find 命令在文件系統中搜索文件和目錄。正則表達式
find 命令用來在指定目錄下查找文件,在參數以前的任何字符串都會看成是目錄名。使用 find 命令時,如何不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件,而且將查找到的子目錄和文件所有顯示出來。express
find 仍是一個功能很是強大的用於處理 Linux 系統上文件的工具,它能夠單獨查找文件,也能夠與其餘程序(命令)結合對須要處理的文件進行操做。ubuntu
Linux文件類型:centos
f #普通文件 l #符號鏈接 d #目錄 c #字符設備 b #塊設備 s #套接字 p #Fifo
UNIX/Linux文件系統中的每一個文件都有三種時間戳:app
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」 的內容ide
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"
基於目錄深度搜索ui
#向下最大深度限制爲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 644
find 和 -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: %sn" {} ;
根據文件大小來查找目標文件
#查找當前目錄下文件大小超過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 命令是須要重點掌握的,無論是平時的學習,仍是往後工做中,這個命令都有着很是重要的做用。