Linux 命令之 find -- 查找文件和目录/搜索文件和目录
文章目錄
- 命令介紹
- 語法格式
- 常用選項
- 文件類型
- 參考示例
- (一)在當前目錄及其子目錄下搜索內容中含有“140.206.111.111”的所有文件
- (二)列出當前目錄及其子目錄下所有文件和目錄
- (三)在指定目錄下查找特定名稱的文件和目錄
- (四)基于目錄深度搜索
- (五)將指定目錄下的指定文件刪除
- (六)將指定目錄下的空目錄全部刪除
- (七)刪除指定名稱的目錄
- (八)將屬于某個用戶的文件的所有權全部轉移到其它用戶名下
- (九)查找指定的文件并全部復制到另一個目錄下
- (十)查找指定的文件并全部打成一個包
- (十一)在指定目錄下搜索隱藏的文件
- (十二)在指定目錄下查找指定名稱的文件和目錄,并將結果保存到指定的文件中
- (十三)在指定目錄下同時查找多種格式的文件
- (十四)在指定目錄下查找特定路徑的文件和目錄
- (十五)基于正則表達式匹配文件路徑,查找特定的文件
- (十六)對查找的結果取反
- (十七)搜索出深度距離當前目錄至少 2 個子目錄的所有文件
- (十八)根據文件時間戳進行查找
- 1.查找最近七天內被訪問過的所有文件
- 2.查找恰好在第七天前被訪問過的所有文件
- 3.查找超過七天內被訪問過的所有文件
- 4.查找訪問時間超過 10 分鐘的所有文件
- 5.查找比 file.log 修改時間更長的所有文件
 
- (十九)根據文件大小進行查找
- 1.查找大于 10KB 的文件
- 2.查找小于 10kb 的文件
- 3.查找等于 10kb 的文件
 
- (二十)在當前目錄下查找權限為 777 的文件
- (二十一)在當前目錄下查找權限不是 644 的 php 文件
- (二十二)在當前目錄下查找用戶 tom 擁有的所有文件
- (二十三)在當前目錄下查找用戶組 sunk 擁有的所有文件
- (二十四)找出自己家目錄下所有的 .txt 文件并刪除
- (二十五)當前目錄下查找所有 .txt 文件并把他們拼接起來寫入到 all.txt 文件中
- (二十六)將 30 天前的 .log 文件移動到 old 目錄中
- (二十七)當前目錄或者子目錄下查找所有 .txt文件,但是跳過子目錄 sk
- (二十八)在家目錄下查找最近7天內修改過的,且以 jpeg 或者 jpg 為擴展名的文件
- (二十九)你的磁盤空間不夠用,你想在 log 目錄下找到所有巨大的(讓我們定義為“大于 1GB”)文件
- (三十)在 /data 中查找 bcotton 擁有的所有文件
- (三十一)在你的主目錄中查找其他人可讀的文件
- (三十二)刪除 MacOS 下自動生成的文件
- (三十三)統計源代碼的行數
- (三十四)命令 find 結合選項 -exec 的使用實例
 
命令介紹
find 命令可以根據給定的目錄和表達式查找文件或目錄。find 參數選項很多,并且支持正則,功能強大。和管道結合使用可以實現復雜的功能,是系統管理者和普通用戶必須掌握的命令。
find 如不加任何選項,表示查找當前目錄下的所有文件和目錄,如果服務器負載比較高盡量不要在高峰期使用 find 命令,find 命令模糊搜索還是比較消耗系統資源的。
語法格式
find <目錄參數> [選項] [條件參數]
常用選項
| -amin<分鐘> | 查找在指定時間曾被存取過的文件或目錄,單位以分鐘計算 | 
| -anewer<參考文件或目錄> | 查找其存取時間較指定文件或目錄的存取時間更接近現在的文件或目錄 | 
| -atime<24小時數> | 查找在指定時間曾被存取過的文件或目錄,單位以24小時計算 | 
| -cmin<分鐘> | 查找在指定時間之時被更改過的文件或目錄 | 
| -cnewer<參考文件或目錄> | 查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄 | 
| -ctime<24小時數> | 查找在指定時間之時被更改的文件或目錄,單位以24小時計算 | 
| -daystart | 從本日開始計算時間 | 
| -depth | 從指定目錄下最深層的子目錄開始查找 | 
| -expty | 尋找文件大小為0 Byte的文件,或目錄下沒有任何子目錄或文件的空目錄 | 
| -exec<執行指令> | 假設find指令的回傳值為true,就執行該指令 | 
| -false | 將find指令的回傳值皆設為false | 
| -fls<列表文件> | 此參數的效果和指定“-ls”參數類似,但會把結果保存為指定的列表文件 | 
| -follow | 排除符號連接 | 
| -fprint<列表文件> | 此參數的效果和指定“-print”參數類似,但會把結果保存成指定的列表文件 | 
| -fprint0<列表文件> | 此參數的效果和指定“-print0”參數類似,但會把結果保存成指定的列表文件 | 
| -fprintf<列表文件><輸出格式> | 此參數的效果和指定“-printf”參數類似,但會把結果保存成指定的列表文件 | 
| -fstype<文件系統類型> | 只尋找該文件系統類型下的文件或目錄 | 
| -gid<群組識別碼> | 查找符合指定之群組識別碼的文件或目錄 | 
| -group<群組名稱> | 查找符合指定之群組名稱的文件或目錄 | 
| -ilname<范本樣式> | 此參數的效果和指定“-lname”參數類似,但忽略字符大小寫的差別 | 
| -iname<范本樣式> | 此參數的效果和指定“-name”參數類似,但忽略字符大小寫的差別 | 
| -inum<inode編號> | 查找符合指定的inode編號的文件或目錄 | 
| -ipath<范本樣式> | 此參數的效果和指定“-path”參數類似,但忽略字符大小寫的差別 | 
| -iregex<范本樣式> | 此參數的效果和指定“-regexe”參數類似,但忽略字符大小寫的差別 | 
| -links<連接數目> | 查找符合指定的硬連接數目的文件或目錄 | 
| -iname<范本樣式> | 指定字符串作為尋找符號連接的范本樣式 | 
| -ls | 假設find指令的回傳值為true,就將文件或目錄名稱列出到標準輸出 | 
| -maxdepth<目錄層級> | 設置最大目錄層級 | 
| -mindepth<目錄層級> | 設置最小目錄層級 | 
| -mmin<分鐘> | 查找在指定時間曾被更改過的文件或目錄,單位以分鐘計算 | 
| -mount | 此參數的效果和指定“-xdev”相同 | 
| -mtime<24小時數> | 查找在指定時間曾被更改過的文件或目錄,單位以24小時計算 | 
| -name<范本樣式> | 指定字符串作為尋找文件或目錄的范本樣式 | 
| -newer<參考文件或目錄> | 查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄 | 
| -nogroup | 找出不屬于本地主機群組識別碼的文件或目錄 | 
| -noleaf | 不去考慮目錄至少需擁有兩個硬連接存在 | 
| -nouser | 找出不屬于本地主機用戶識別碼的文件或目錄 | 
| -ok<執行指令> | 此參數的效果和指定“-exec”類似,但在執行指令之前會先詢問用戶,若回答“y”或“Y”,則放棄執行命令 | 
| -path<范本樣式> | 指定字符串作為尋找目錄的范本樣式 | 
| -perm<權限數值> | 查找符合指定的權限數值的文件或目錄 | 
| 假設find指令的回傳值為true,就將文件或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱前皆有“./”字符串 | |
| -print0 | 假設find指令的回傳值為true,就將文件或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行 | 
| -printf<輸出格式> | 假設find指令的回傳值為true,就將文件或目錄名稱列出到標準輸出。格式可以自行指定 | 
| -prune | 不尋找字符串作為尋找文件或目錄的范本樣式 | 
| -regex<范本樣式> | 指定字符串作為尋找文件或目錄的范本樣式 | 
| -size<文件大小> | 查找符合指定的文件大小的文件 | 
| -true | 將find指令的回傳值皆設為true | 
| -type<文件類型> | 只尋找符合指定的文件類型的文件 | 
| -uid<用戶識別碼> | 查找符合指定的用戶識別碼的文件或目錄 | 
| -used<日數> | 查找文件或目錄被更改之后在指定時間曾被存取過的文件或目錄,單位以日計算 | 
| -user<擁有者名稱> | 查找符和指定的擁有者名稱的文件或目錄 | 
| -xdev | 將范圍局限在先行的文件系統中 | 
| -xtype<文件類型> | 此參數的效果和指定“-type”參數類似,差別在于它針對符號連接檢查 | 
| -help 或 --help | 在線幫助,在MacOS中無法使用任何選項查看find命令的使用幫助,只能使用man命令查看在線幫助文檔 | 
| -version 或 --version | 顯示版本信息 | 
文件類型
| f | 普通文件 | 
| l | 符號連接 | 
| d | 目錄 | 
| c | 字符設備 | 
| b | 塊設備 | 
| s | 套接字 | 
| p | Fifo | 
參考示例
(一)在當前目錄及其子目錄下搜索內容中含有“140.206.111.111”的所有文件
[root@htlwk0001host qpw]# find . -type f -name "*" | xargs grep "140.206.111.111" # 在這里-name是多余的(二)列出當前目錄及其子目錄下所有文件和目錄
[root@htlwk0001host qpw]# find .(三)在指定目錄下查找特定名稱的文件和目錄
在 /home 目錄及其子目錄下查找以 .txt 結尾的文件(包含目錄):
[root@htlwk0001host qpw]# find /home -name "*.txt" # 單引號、雙引號,甚至不加引號都可以在根目錄及其子目錄下查找以 .vim 開頭的文件和目錄:
[root@htlwk0001host test]# find / -name '.vim*' /root/.vim /root/.viminfo(四)基于目錄深度搜索
(五)將指定目錄下的指定文件刪除
刪除當前目錄及其子目錄下的所有以“.txt”為后綴的文件:
[root@htlwk0001host qpw]# find . -type f -name "*.txt" -delete(六)將指定目錄下的空目錄全部刪除
將目錄 /dir 及其子目錄下的空目錄全部刪除:
[root@htlwk0001host qpw]# find /dir -type d -empty -delete解釋:
(七)刪除指定名稱的目錄
刪除當前目錄及其子目錄下的名為 MyDocuments 的目錄:
[root@localhost test]# find . -type d -name "MyDocuments" -exec rm -rf {} +(八)將屬于某個用戶的文件的所有權全部轉移到其它用戶名下
借助 -exec 選項與其他命令結合使用,在當前目錄及其子目錄下找出用戶 root 所有的文件,并把文件的所有者更改為用戶 tom:
[root@htlwk0001host qpw]# find . -type f -user root -exec chown tom {} \;上例中, {} 用于與 -exec 選項結合使用來匹配所有文件,然后會被替換為相應的文件名。
(九)查找指定的文件并全部復制到另一個目錄下
在指定目錄下查找所有以“.txt”結尾的文件并復制到另一個目錄下:
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents(十)查找指定的文件并全部打成一個包
查找所有以“.log”結尾的文件并做成一個 bzip 包:
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2(十一)在指定目錄下搜索隱藏的文件
在當前目錄下及其子目錄下查找隱藏文件:
[root@htlwk0001host /]# find . -name '.*' [root@htlwk0001host /]# find . -iname '.*' # -i 表示忽略大小寫(十二)在指定目錄下查找指定名稱的文件和目錄,并將結果保存到指定的文件中
在目錄 /home/www 下查找所有的隱藏文件和目錄,并將結果寫入到文件 foo.txt:
[root@dabu.info ~]#find /home/www/ -name ".*" > foo.txt接著你可以使用命令 cat 或者 less 來查看文件的內容。
(十三)在指定目錄下同時查找多種格式的文件
當前目錄及子目錄下查找所有以 .txt 和 .pdf 結尾的文件:
[root@htlwk0001host /]# find . \( -name "*.txt" -o -name "*.pdf" \) ./etc/pki/nssdb/pkcs11.txt ./root/log.txt或
[root@htlwk0001host /]# find . -name "*.txt" -o -name "*.pdf"(十四)在指定目錄下查找特定路徑的文件和目錄
在目錄 /usr 及其子目錄下查找路徑中含有關鍵詞“local”的目錄和文件:
[root@htlwk0001host /]# find /usr/ -path "*local*" /usr/bin/locale(十五)基于正則表達式匹配文件路徑,查找特定的文件
使用正則表達式查找以“.txt”或者“.pdf”作為擴展名的文件:
[root@htlwk0001host /]# find . -regex ".*\(\.txt\|\.pdf\)$" ./etc/pki/nssdb/pkcs11.txt [root@htlwk0001host /]# find . -iregex ".*\(\.txt\|\.pdf\)$" # -i 忽略大小寫 ./etc/pki/nssdb/pkcs11.txt(十六)對查找的結果取反
目錄 /home 及其子目錄下找出不是以 “.txt” 結尾的文件:
[root@htlwk0001host /]# find /home ! -name "*.txt" /home /home/wwwroot /home/wwwroot/liaowenxiong(十七)搜索出深度距離當前目錄至少 2 個子目錄的所有文件
[root@htlwk0001host /]# find . -mindepth 2 -type f ./dev/shm/aliyun-assist-agent-coldstarted ./proc/fb ./proc/fs/xfs/xqm ./proc/fs/xfs/xqmstat(十八)根據文件時間戳進行查找
UNIX/Linux 文件系統每個文件都有三種時間戳:
1.查找最近七天內被訪問過的所有文件
[root@htlwk0001host /]# find . -type f -atime -7 ./dev/shm/aliyun-assist-agent-coldstarted ./proc/fs/xfs/xqm2.查找恰好在第七天前被訪問過的所有文件
這里要注意,是當前時間往前第 7 天被訪問的文件,而不是 7 天前的意思,7 天前是指當前時間往前第 8 天,第 9 天,第 10 天…
[root@htlwk0001host /]# find . -type f -atime 73.查找超過七天內被訪問過的所有文件
搜索訪問時間超過 7 天的所有文件:
[root@htlwk0001host /]# find . -type f -atime +74.查找訪問時間超過 10 分鐘的所有文件
[root@htlwk0001host /]# find . -type f -amin +105.查找比 file.log 修改時間更長的所有文件
[root@htlwk0001host /]# find . -type f -newer file.log(十九)根據文件大小進行查找
文件大小單元:
1.查找大于 10KB 的文件
[root@htlwk0001host /]# find . -type f -size +10k # 大于 10kb,不含 10kb2.查找小于 10kb 的文件
[root@htlwk0001host /]# find . -type f -size -10k3.查找等于 10kb 的文件
[root@htlwk0001host /]# find . -type f -size 10k(二十)在當前目錄下查找權限為 777 的文件
[root@htlwk0001host ~]# find . -type f -perm 777(二十一)在當前目錄下查找權限不是 644 的 php 文件
[root@htlwk0001host ~]# find . -type f -name "*.php" ! -perm 644(二十二)在當前目錄下查找用戶 tom 擁有的所有文件
[root@htlwk0001host ~]# find . -type f -user tom(二十三)在當前目錄下查找用戶組 sunk 擁有的所有文件
[root@htlwk0001host ~]# find . -type f -group sunk(二十四)找出自己家目錄下所有的 .txt 文件并刪除
[root@htlwk0001host ~]# find $HOME/. -name "*.txt" -ok rm {} \;-ok 和 -exec 行為一樣,不過它會給出提示,是否執行相應的操作。
(二十五)當前目錄下查找所有 .txt 文件并把他們拼接起來寫入到 all.txt 文件中
[root@htlwk0001host ~]# find . -type f -name "*.txt" -exec cat {} \; > all.txt(二十六)將 30 天前的 .log 文件移動到 old 目錄中
[root@htlwk0001host ~]# find . -type f -mtime +30 -name "*.log" -exec cp {} old \;(二十七)當前目錄或者子目錄下查找所有 .txt文件,但是跳過子目錄 sk
[root@htlwk0001host ~]# find . -path "./sk" -prune -o -name "*.txt" -print(二十八)在家目錄下查找最近7天內修改過的,且以 jpeg 或者 jpg 為擴展名的文件
[root@htlwk0001host ~]# find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7(二十九)你的磁盤空間不夠用,你想在 log 目錄下找到所有巨大的(讓我們定義為“大于 1GB”)文件
[root@htlwk0001host ~]# find /var/log -size +1G(三十)在 /data 中查找 bcotton 擁有的所有文件
find /data -owner bcotton(三十一)在你的主目錄中查找其他人可讀的文件
find ~ -perm -o=r(三十二)刪除 MacOS 下自動生成的文件
find ./ -name '__MACOSX' -depth -exec rm -rf {} \;(三十三)統計源代碼的行數
find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代碼行數統計, 排除空行(三十四)命令 find 結合選項 -exec 的使用實例
請猛戳《Linux 中常見的較為復雜的 find 命令實例》
總結
以上是生活随笔為你收集整理的Linux 命令之 find -- 查找文件和目录/搜索文件和目录的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Mac OS 通过配置窗口来连接远程主机
- 下一篇: 爱上钢琴电脑版(爱上钢琴曲)
