每天學一個 Linux 命令(20):find

2021-02-13 民工哥技術之路
命令簡介

find 命令在文件系統中搜索文件和目錄。

find 命令用來在指定目錄下查找文件,在參數之前的任何字符串都會當作是目錄名。使用 find 命令時,如何不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件,並且將查找到的子目錄和文件全部顯示出來。

find 還是一個功能非常強大的用於處理 Linux 系統上文件的工具,它可以單獨查找文件,也可以與其他程序(命令)結合對需要處理的文件進行操作。

補充說明

Linux文件類型:

f #普通文件
l #符號連接
d #目錄
c #字符設備
b #塊設備
s #套接字
p #Fifo

UNIX/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 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: %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 命令是需要重點掌握的,不管是平時的學習,還是日後工作中,這個命令都有著非常重要的作用。

相關焦點

  • 每天學一個 Linux 命令(34):wc
    命令簡介wc 命令用來統計文件中的行數、單詞數或字節數,然後將結果輸出在終端上。我們可以使用 wc 命令來計算文件的Byte數、字數或是列數。統計當前目錄下的所有文件行數及總計行數[root@centos7 ~]# wc -l *      48 anaconda-ks.cfgwc: goinception: Is a directory       0 goinception   45222 goInception-linux-amd64
  • 每天一個 Linux 命令(31): /etc/group文件詳解
    linux /etc/group文件是有關於系統管理員對用戶和用戶組管理的文件,linux用戶組的所有信息都存放在/etc/group文件中。具有某種共同特徵的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。
  • 每天一個 Linux 命令:grep 命令
    1.命令格式:grep [option] pattern file2.命令功能:用於過濾/搜索的特定字符。可使用正則表達式能多種命令配合使用,使用上十分靈活。#匹配一個非換行符的字符 如:'gr.p'匹配gr後接一個任意字符,然後是p。    *  #匹配零個或多個先前字符 如:'*grep'匹配所有一個或多個空格後緊跟grep的行。    .*   #一起用代表任意字符。   []   #匹配一個指定範圍內的字符,如'[Gg]rep'匹配Grep和grep。
  • Linux工作必備命令:find命令,搜索神器高級用法
    linux系統下一切都是文檔(廢話,windows也是),而且作為開發人員平時是不使用圖形界面的,那麼多的文檔不可能都記住放在哪裡,有時候我們印象中只是記下了文檔大概的名字或者文件格式,這時候我們就需要find命令根據我們僅存的記憶來搜索文檔了。
  • 每天一個 Linux 命令(23):Linux 目錄結構
    ,深入了解linux文件目錄結構的標準和每個目錄的詳細功能,對於我們用好linux系統只管重要,下面我們就開始了解一下linux目錄結構的相關知識。當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin … … 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或文件。
  • Linux中find命令細節詳解
    提示:點擊上方"Linux公社"↑免費訂閱find命令特點:文件查找,實時查找,速度略慢,精確匹配使用格式:# find [options] [uid 502查找/tmp目錄下GID為502的文件:# find /tmp -gid 502一個普通用戶例如linuxmi
  • Linux常用命令 - sed
    在處理文本文件時,通常需要在一個或多個文件中查找和替換文本字符串。sed 是一個流編輯器。它可以對文件和輸入流(如管道)執行基本的文本操作。使用 sed,您可以搜索、查找和替換、插入和刪除單詞和行。 它支持基本的和擴展的正則表達式,允許您匹配複雜的模式。接下來, 我將使用 sed 查找和替換字符串。我還將向您展示如何執行遞歸搜索和替換。
  • 每天學一個 Linux 命令(16):mkdir
    昨日:每天學一個 Linux 命令(15):man命令簡介mkdir 命令用於創建新目錄。創建目錄時,如果目錄名前沒有指定路徑,那麼就直接在當前工作目錄下創建新的目錄。如指定了路徑,那麼就會在這個指定的目錄下創建一個新目錄。
  • linux常用命令—find
    Linux的find 命令有非常大的靈活性,可以向其指定豐富的搜索條件(如文件權限、屬主、屬組、文件類型、日期和大小等)來定位系統中的文件和目錄。此外,find 還支持對搜索到的結果進行多種類型的命令操作。
  • Linux命令之文件搜索
    前言在linux最小安裝模式下,當我們登錄到一臺不是自己安裝的linux伺服器上時,有的時候我們需要知道某個軟體的安裝位置,例如:我們需要知道mysql安裝在哪個目錄下,那麼我們應該怎麼辦呢?這就用到了文件的搜索功能。
  • 教你Linux find命令實例教程:15個find命令用法
    使用上一個示例中提到的相同文件列表,您還可以使用find來搜索與文本文件內的模式不符的任何文件。再一次,我們將結合使用find和grep命令;我們只需要用grep指定一個附加選項:$ find /path/to/search | grep -f filelist.txtgrep的-v選項表示「逆向匹配」,並且將返回與文件列表中指定的任何模式都不匹配的文件列表。find命令默認將進行遞歸搜索。
  • 每天學一個 Linux 命令(11):cp
    推薦:每天學一個 Linux 命令(10):passwdGithub地址:https://github.com/mingongge/Learn-a-Linux-command-every-day命令簡介
  • 每天學一個 Linux 命令(42):unzip
    昨日推薦:每天學一個 Linux 命令(41):zip命令簡介unzip 命令用於解壓由zip命令壓縮的壓縮包文件。-s  #將文件名中的空白字符轉換為底線字符-d<目錄>  #將解壓縮後存至指定的目錄下-x<文件>  #指定不要處理.zip壓縮文件中的哪些文件-Z  #unzip-Z相當於執行zipinfo命令應用舉例解壓一個文件
  • 每天學一個 Linux 命令(17):chmod
    昨日推薦:每天學一個 Linux 命令(16):mkdir命令簡介chmod 命令用來變更文件或目錄的權限。文件或目錄權限有讀取、寫入、執行這3種,另外還有3種特殊權限。suid或sgid,在其所有者或所屬組權限的可執行位上有明顯的標記,如果文件設置了suid且也設置了x(執行)權限,則在其執行權限位上會顯示一個字母s(小寫)。
  • linux最常用的命令
    >rm -- -f* 刪除以-f開頭的文件【rmdir命令】 從一個目錄中刪除一個或多個子目錄項,刪除某目錄時也必須具有對其父目錄的寫權限注意:不能刪除非空目錄常用命令:rmdir -p parent/child/child1 當parent子目錄被刪除後使它也成為了空目錄的話,則順便一併刪除【mv命令】 -- 移動文件或修改文件名
  • 每天學一個 Linux 命令(29):tail
    昨日推薦:每天學一個 Linux 命令(28):ln命令簡介tail 顯示文件內容的尾部,默認也是顯示指定文件的末尾10行。tail 命令還可以查看文件實時寫入的數據,例如,我們常用它來查看應用運行的日誌文件,可以動態實時顯示應用運行所產生的日誌,便於排錯或查看應用運行是否正常。
  • linux命令大全
    Linux命令大全之所以有存在的必要就是因為,linux作為非主流市場裡面的主流作業系統,不僅是免費的而且它還是一個非常優秀的作業系統,與MS-WINDOWS相比,可靠、 穩定、速度快。且擁有豐富的根據UNIX版本改進的強大功能。
  • Linux常用命令:Linux more命令使用方法
    1.命令格式:more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 2.命令功能:more命令和cat的功能一樣都是查看文件裡的內容,但有所不同的是more可以按頁來查看文件的內容,還支持直接跳轉行等功能。
  • Linux之find命令參數總結
    Liunx find系列Linux之find命令Liunx之find常用命令匯總Linux之find execLinux之findxargsfind 常見的注意事項使用name選項文件名選項是find命令最常用的選項,要麼單獨使用該選項,要麼和其他選項一起使用。
  • 【玩轉Linux命令】Linux中find常見用法
    Linux中find常見用法示例find  path   -option   [  -print ]   [ -exec   -ok  command ]   {} \;find命令的參數; pathname: find命令所查找的目錄路徑。