Linux--查找命令find(一)

說道查找命令,第一個想到的就是find,用法多樣,加上-exec,你能夠玩的很開心。小缺點是須要遍歷目錄下全部,查找會比較慢。例如遍歷/下查找,尤爲是系統中文件很是多時,你能夠先去聽首歌,再來看結果(固然了,這有點誇張!)。vim

1、語法格式

一、基本例子

[root@salt-master test03]#  find /etc/ -name network
/etc/sysconfig/network
/etc/vmware-tools/scripts/vmware/network
/etc/rc.d/init.d/network

通常狀況下,查找範圍越大,目錄層級越深,查找速度就越慢。bash

[root@salt-master test03]# time  find / -name ifcfg-eth0

real    0m0.850s
user    0m0.239s
sys     0m0.598s

注意:real遠大於user加上sys,由於find須要遍歷各個目錄,須要大量的I/O操做,而磁盤I/O一般是最慢的環節,所以大部分時間find進程都在等待磁盤I/O完成。less

二、按條件查找

一、按照文件名搜索
-name: 按名字查找
-iname:忽略大小寫
[root@salt-master test03]# find /etc -name networkmanager
[root@salt-master test03]# find /etc -iname networkmanager
/etc/NetworkManager
二、按照文件類型查找 -type
f:  普通文件
d:  目錄
l:  軟鏈接
......
[root@salt-master test03]# ll
total 4
drwxr-xr-x 2 root root 4096 Dec 13 15:47 01
-rw-r--r-- 1 root root    0 Dec 13 15:47 02
[root@salt-master test03]# find . -type f
./02
[root@salt-master test03]# find . -type d
.
./01
三、按照時間查找
[root@salt-master test03]# stat 文件名  能夠查看文件的三個時間
atime:訪問時間,cat  more less ... ...
mtime:文件的內容發生變化的時間,vim ... ...  (也是 ll 所顯示的時間)
ctime:文件的屬性發生變化的時間,好比:權限改變、大小改變、全部者、所屬組等改變
-atime n     以天爲單位
-amin  n     以分鐘爲單位
-mtime n     以天爲單位
n爲數字,前面能夠帶+或者-號    
+n:n+1天以前
n :n到n+1天之間
-n:n天之內

1.查找/find下修改時間在24小時(1天)以內的文件和目錄ide

[root@salt-master test03]# find . -mtime -1
./01
./02

2.查找/find下修改時間在2天前的普通文件 ui

[root@salt-master test03]# ll
total 8
drwxr-xr-x 2 root root 4096 Dec 13 15:47 01
-rw-r--r-- 1 root root    0 Dec 13 15:47 02
-rw-r--r-- 1 root root  193 Apr 12  2019 11.txt
[root@salt-master test03]# find . -type f -mtime +1
./11.txt
四、按照用戶和組查找
-user 用戶名
-group 組名
-uid uid
-gid gid
-nouser:孤兒文件,沒有全部者的文件
-nogroup:沒有所屬組的文件

1.查找系統中全部者是finduser的文件this

[root@salt-master test03]# useradd finduser
[root@salt-master test03]# find / -user finduser -type f
/var/spool/mail/finduser
/home/finduser/.bash_logout
/home/finduser/.bashrc
/home/finduser/.bash_profile

2.查找系統中的孤兒文件code

[root@salt-master test03]# userdel finduser
[root@salt-master test03]# find /home/ -type f -nouser
/home/finduser/.bash_logout
/home/finduser/.bashrc
/home/finduser/.bash_profile
六、按照文件大小查找 -size
+        大於
-        小於
直接數字   等於
‘b’    for  512-byte  blocks (this is the default if no suffix is used)
‘c’    for bytes
‘w’    for two-byte words
‘k’    for Kilobytes (units of 1024 bytes)
‘M’    for Megabytes (units of 1048576 bytes)
‘G’    for Gigabytes (units of 1073741824 bytes)
[root@salt-master test03]# ll -h
total 5.1M
drwxr-xr-x 2 root root 4.0K Dec 13 15:47 01
-rw-r--r-- 1 root root    0 Dec 13 15:47 02
-rw-r--r-- 1 root root 5.0M Dec 13 16:40 04
-rw-r--r-- 1 root root  193 Apr 12  2019 11.txt
[root@salt-master test03]# find . -type f -size 3M
[root@salt-master test03]# find . -type f -size -3M
./02
./11.txt
[root@salt-master test03]# find . -type f -size 3M
[root@salt-master test03]# find . -type f -size +3M
./04

三、動做

-exec 動做   -- 找到結果以後直接執行動做
-ok 動做     -- 執行動做以前先提示,即須要交互
[root@salt-master test03]# find . -type f -size +3M
./04
[root@salt-master test03]# find . -type f -size +3M -exec ls -l {} \;
-rw-r--r-- 1 root root 5242880 Dec 13 16:40 ./04
{} —— 用來代替找到的結果
\;  —— 表示結束標誌
[root@salt-master test03]# find . -type f -size +3M -ok ls -l {} \;
< ls ... ./04 > ? y
-rw-r--r-- 1 root root 5242880 Dec 13 16:40 ./04
[root@salt-master test03]# find . -type f -size +3M -ok ls -l {} \;
< ls ... ./04 > ? n

例如,有時候只想修改當前目錄下全部文件權限爲644,但不想修改目錄權限,能夠以下操做
find ./* -type f -exec chmod 644 {} \;進程

瞭解了-exec後,find和其餘命令的組合起來使用,會使它的功能變得會很是強大和方便。ip

相關文章
相關標籤/搜索