首頁 > 軟體

find 命令全集

2022-12-09 14:03:26

find命令詳解

1. find命令作用

find命令用來在指定目錄下查詢檔案。

2. find命令選項基本格式

find 目錄 -選項 動作[-print -exec -ok ...]

3. 常用選項:

-a:and 必須滿足兩個條件才顯示
-o:or 只要滿足一個條件就顯示
-name:按照檔名查詢檔案
-iname:按照檔名查詢檔案(忽略大小寫)
-type:根據檔案型別進行搜尋
-perm:按照檔案許可權來查詢檔案
-user 按照檔案屬主來查詢檔案。
-group 按照檔案所屬的組來查詢檔案。
-fprint 檔名:將匹配的檔案輸出到檔案。
-newer file1 ! newer file2 查詢更改時間比檔案file1新但比檔案file2舊的檔案

4. 常用動作:

-print 預設動作,將匹配的檔案輸出到標準輸出
-exec 對匹配的檔案執行該引數所給出的命令。相應命令的形式為 'command' { } ;,注意{ }和;之間的空格。
-ok 和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行。
-delete 將匹配到的檔案刪除
|xargs  將匹配到的檔案刪除   |xargs rm -rf 

5. 根據檔名進行匹配

5.1 列出當前目錄及子目錄下所有檔案和資料夾

命令:find .

命令:find .

[root@host-134 ~]# find .
.
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./.mysql_history
./zuoye
./zuoye/lnmp.sh
./zuoye/system.sh
./nginx-1.18.0
./nginx-1.18.0/auto
./nginx-1.18.0/auto/cc
./nginx-1.18.0/auto/cc/acc
./nginx-1.18.0/auto/cc/bcc

5.2 在/home目錄下查詢以.txt結尾的檔名

 find /home/ -name "*.txt" 

5.3 在/home目錄下查詢以.txt結尾的檔名,但忽略大小寫

find /home -iname "*.txt"

5.4 查詢 /home/ 下所有以.txt或.pdf結尾的檔案

find /home/ -name "*.txt" -o -name "*.pdf"

5.5 查詢 /home/ 下所有以a開頭和以.txt結尾的檔案

find /home/ -name "*.txt" -a -name "a*"

5.6 搜尋/home目錄下txt結尾的檔案,並將輸出到指定檔案中(re.txt)

[root@localhost home]# find /home/ -type f -name "*.txt" -fprint /tmp/re.txt 
[root@localhost home]# cat /tmp/re.txt
/home/a.txt
/home/b.txt

6. 根據檔案型別進行搜尋

-type 型別引數

型別引數列
f 普通檔案
l 符號連線(軟連線)
d 目錄
b 塊裝置
s 通訊端

6.1

[root@host-136 ~]# find /home/ -type f
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

6.2

[root@host-136 ~]# find /usr/bin/ -type l
/usr/bin/bashbug
/usr/bin/lastb
/usr/bin/sh
/usr/bin/geqn
/usr/bin/ex
/usr/bin/lz4cat
/usr/bin/gneqn
/usr/bin/gnroff

6.3

[root@host-136 ~]# find /usr/local/ -type d
/usr/local/
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/sbin

6.4

[root@host-134 ~]# find /dev/ -type b
/dev/dm-1
/dev/dm-0
/dev/sda2
/dev/sda1
/dev/sda
/dev/sr0

6.5

[root@localhost home]# find /var/lib/ -type s
/var/lib/mysql/mysql.sock

7. 基於目錄深度搜尋

7.1 向下最大深度限制為3

[root@host-136 ~]# find /usr/local/ -maxdepth 3 -type d
/usr/local/
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/sbin
/usr/local/share
/usr/local/share/applications
/usr/local/share/info
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man1x

7.2 搜尋出深度距離當前目錄至少2個子目錄的所有檔案

[root@host-136 ~]# find /usr/local/ -mindepth 2 -type f
/usr/local/sbin/mail.py

8. 根據檔案時間戳進行搜尋

8.1 UNIX/Linux檔案系統每個檔案都有三種時間戳:

存取時間(-atime/天,-amin/分鐘):使用者最近一次存取時間。
修改時間(-mtime/天,-mmin/分鐘):檔案最後一次修改時間
變化時間(-ctime/天,-cmin/分鐘):檔案資料元(例如許可權等)最後一次修改時間。

8.2 stat 命令檢視:

[root@host-136 ~]# stat /etc/passwd
File: ‘/etc/passwd'
Size: 950 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d    Inode: 33818061 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2021-01-06 09:17:36.122732027 +0800
Modify: 2021-01-06 09:17:36.114732083 +0800
Change: 2021-01-06 09:17:36.115732076 +0800
Birth: -

8.3 搜尋最近七天內被存取過的所有檔案

[root@host-136 ~]# find /etc/ -type f -atime -7
/etc/fstab
/etc/crypttab
/etc/resolv.conf
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
/etc/pki/ca-trust/ca-legacy.conf
/etc/pki/ca-trust/extracted/java/cacerts
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

8.4 搜尋超過七天內(7天外)被存取過的所有檔案

[root@host-136 ~]# find /etc -type f -atime +7
/etc/sasl2/smtpd.conf
/etc/ethertypes
/etc/makedumpfile.conf.sample
/etc/postfix/access
/etc/postfix/canonical
/etc/postfix/generic
/etc/postfix/header_checks
/etc/postfix/relocated
/etc/postfix/transport
/etc/postfix/virtual

9. 根據檔案大小進行匹配

用法
find . -type f -size 檔案大小單元
檔案大小單元:

b —— 塊(512位元組)
c —— 位元組
w —— 字(2位元組)
k —— 千位元組
M —— 兆位元組
G —— 吉位元組

9.1 搜尋大於10KB的檔案

[root@host-136 ~]# find /etc/ -type f -size +10k
/etc/ssh/moduli
/etc/postfix/access
/etc/postfix/canonical
/etc/postfix/header_checks
/etc/postfix/main.cf
/etc/postfix/transport
/etc/postfix/virtual

9.2 搜尋小於10KB的檔案

[root@host-136 ~]# find /etc/ -type f -size -10k
/etc/man_db.conf
/etc/sudo-ldap.conf
/etc/sudo.conf
/etc/sudoers
/etc/e2fsck.conf
/etc/mke2fs.conf
/etc/vconsole.conf
/etc/locale.conf

9.3 搜尋等於10KB的檔案

[root@host-136 ~]# find /etc/ -type f -size 10k
/etc/dbus-1/system.d/org.freedesktop.systemd1.conf
/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf
/etc/selinux/targeted/active/modules/100/accountsd/hll
/etc/selinux/targeted/active/modules/100/acct/hll
/etc/selinux/targeted/active/modules/100/aiccu/hll
/etc/selinux/targeted/active/modules/100/alsa/hll
/etc/selinux/targeted/active/modules/100/arpwatch/hll

9.4 搜尋大於10G的紀錄檔檔案,並刪除

[root@host-136 ~]# find /var/log -type f -name "*.log" -size +10G -delete

10. 根據檔案許可權/所有權進行匹配

找出指定目錄下許可權不是644的txt檔案

[root@host-136 ~]# find / -type f -name "*.txt" ! -perm 644
/usr/lib/firmware/ivtv-firmware-license-end-user.txt
/usr/lib/firmware/ivtv-firmware-license-oemihvisv.txt
/usr/share/licenses/shadow-utils-4.6/gpl-2.0.txt
/usr/share/licenses/shadow-utils-4.6/shadow-bsd.txt

找出/home目錄使用者frank擁有的所有檔案

[root@host-136 ~]# find /home/ -type f -user frank
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

找出/home目錄使用者組frank擁有的所有檔案

[root@host-136 ~]# find /home/ -type f -group frank
/home/frank/.bash_logout
/home/frank/.bash_profile
/home/frank/.bashrc

11. 藉助-exec選項與其他命令結合使用

找出/tmp目錄下所有root的檔案,並把所有權更改為使用者frank

find /tmp/ -type f -user root -exec chown frank {} ;
使用預留位置{}來表示find到的檔名

找出家目錄下所有的.sh檔案並刪除

[root@localhost home]# find $HOME -name "*.sh" -ok rm {} ;find #HOME -name "*.sh" -exec rm {} ;
< rm ... /root/install_lnmp.sh > ? y
-ok和-exec行為一樣,不過它會給出提示,是否執行相應的操作。

查詢/home目錄下所有.txt檔案並把他們拼接到all.txt檔案中

find /home/ -type f -name "*.txt" -exec cat {} ;>all.txt

查詢/home目錄下所有.txt檔案並把他們複製到/opt/backup檔案中

find /home/ -type f -name "*.txt" -exec cp {} /opt/backup/ ;

在/var/log目錄中查詢更改時間在5日以前的檔案並刪除它們:

find /var/log -type f -mtime +5 -exec rm {} ;find /var/log -type f -mtime +5 |xargs rm -rf

到此這篇關於find 命令全集的文章就介紹到這了,更多相關find 命令詳解內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com