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

圖片

昨日推薦:天天學一個 Linux 命令(19):rmlinux

命令簡介

find 命令在文件系統中搜索文件和目錄。正則表達式

find 命令用來在指定目錄下查找文件,在參數以前的任何字符串都會看成是目錄名。使用 find 命令時,如何不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件,而且將查找到的子目錄和文件所有顯示出來。express

find 仍是一個功能很是強大的用於處理 Linux 系統上文件的工具,它能夠單獨查找文件,也能夠與其餘程序(命令)結合對須要處理的文件進行操做。ubuntu

補充說明

Linux文件類型:centos

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

UNIX/Linux文件系統中的每一個文件都有三種時間戳:app

  • 訪問時間 (-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」 的內容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 命令是須要重點掌握的,無論是平時的學習,仍是往後工做中,這個命令都有着很是重要的做用。
image

相關文章
相關標籤/搜索