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