Linux中文件查找相关命令
1. locate——简单快速的文件查找命令
locate是一个简单快速的文件查找命令,查找速度快,而且无需指定查找起始路径。
locate 文件名
[root@localhost ~]# locate sshd_config
/etc/ssh/sshd_config
/usr/share/man/man5/sshd_config.5.gz
PS: locate命令的查找依赖于实现构建好的索引数据库,而索引数据库主要是由系统根据周期性任务计划来自动更新,因而locate只能查找到索引数据库更新之前的文件,查找结果也未必精确。
2. find——强大的文件查找命令(多级查找)
find是功能最强大的文件查找命令,它可以实现文件的精确查找,语法格式为:
find [查找起始路径] [选项] [查找条件] [处理动作]
- 查找起始路径:可以根据需要指定,默认为当前路径。如果指定为"/",就表示在整个硬盘中查找
- 查找条件:指定的查找标准,可以根据文件名、文件大小、文件类型、从属关系、权限等进行设置,默认为找出指定路径下的所有文件
- 处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出
操作 | 功能 |
---|---|
find [查找起始路径] -name [查找条件] | 按照名称进行查找,允许使用通配符 |
find [查找起始路径] -iname [查找条件] | 按照名称查找,不区分大小写 |
find [查找起始路径] -empty [查找条件] | 查找空文件或目录 |
find [查找起始路径] -type [查找条件] | 按文件类型查找,文件类型指的是普通文件(f)、目录(d)、符号链接文件(l)、块设备文件(b),字符设备文件(c) |
find [查找起始路径] -size [查找条件] | 按照文件大小来查找。一般使用"+"、"-"来设置超过或低于指定大小作为查找条件(k、M、G) |
find [查找起始路径] -not [查找条件] | 取反 |
find [查找起始路径] -atime [查找条件] | 按照访问时间查找(以天为单位)。如果以分钟为单位,选项变为amin |
find [查找起始路径] -mtime [查找条件] | 按照更改时间查找(以天为单位)。如果以分钟为单位,选项变为mmin |
find [查找起始路径] -ctime [查找条件] | 按照改动时间查找(以天为单位)。如果以分钟为单位,选项变为cmin |
find [查找起始路径] -exec [查找条件] | 对查找到的结果进行进一步的处理,在命令中可以使用"{}“表示find命令查找到的结果,而且最后必须添加”“表示命令结束,”"前面有个空格 find /tmp -name “*.txt” -exec rm -f {} ; 记住加上分号 |
[root@localhost ~]# find /etc -name "passwd"
/etc/pam.d/passwd
/etc/passwd
[root@localhost ~]# find /etc -name "pass"
[root@localhost ~]# find /etc -name "*pass*"
/etc/fonts/conf.d/60-overpass.conf
/etc/security/opasswd
/etc/pam.d/passwd
/etc/pam.d/gdm-password
/etc/pam.d/password-auth-ac
/etc/pam.d/password-auth
/etc/passwd
/etc/openldap/certs/password
/etc/selinux/targeted/active/modules/100/passenger
/etc/passwd-
[root@localhost ~]# find /boot -not -type f -ls
64 4 dr-xr-xr-x 5 root root 4096 2月 28 19:06 /boot
67 0 drwx------ 3 root root 17 7月 29 2020 /boot/efi
524352 0 drwxr-xr-x 4 root root 32 2月 28 19:02 /boot/efi/EFI
1069120 0 drwx------ 3 root root 190 2月 28 19:02 /boot/efi/EFI/centos
1069128 0 drwx------ 2 root root 6 7月 29 2020 /boot/efi/EFI/centos/fw
524353 0 drwxr-xr-x 2 root root 62 2月 28 19:02 /boot/efi/EFI/BOOT
1572928 0 drwx------ 5 root root 97 2月 28 19:06 /boot/grub2
1572930 12 drwxr-xr-x 2 root root 8192 2月 28 19:06 /boot/grub2/i386-pc
78 4 drwxr-xr-x 2 root root 4096 2月 28 19:06 /boot/grub2/locale
524357 0 drwxr-xr-x 2 root root 25 2月 28 19:06 /boot/grub2/fonts
68 0 drwxr-xr-x 2 root root 27 2月 28 19:02 /boot/grub
[root@localhost ~]# find /tmp -atime +7 #访问时间在7天之前
/tmp/.ICE-unix/1452
/tmp/.ICE-unix/1972
/tmp/.ICE-unix/1583
/tmp/.ICE-unix/1873
/tmp/.ICE-unix/1584
/tmp/.ICE-unix/1910
/tmp/ssh-JkzGFaOr1bj2/agent.1878
/tmp/ssh-IrIrF4CNplbS/agent.1972
/tmp/hi.txt
/tmp/fstab
/tmp/ssh-KyNFmsVfPFaj/agent.1886
/tmp/ssh-eDcwzMdVYb4I/agent.1910
/tmp/ssh-LuXSNRxmgaEy/agent.1878
/tmp/ssh-fUbPjvVRDC2t/agent.1873
/tmp/yum_save_tx.2022-03-07.10-27.6sLQbv.yumtx
/tmp/yum_save_tx.2022-03-08.09-24.nXhozc.yumtx
[root@localhost ~]# find /etc -name "*ssh*" -type f -exec cp {} /tmp/ssh \
2.1 关于find中exec选项的说明
exec选项最主要的作用就是将find命令找到的结果当成文件去处理,而默认情况下,find命令找到的结果是被当作文本信息去处理的。
[root@localhost ~]# touch /tmp/{a,b,c}.txt
[root@localhost ~]# find /tmp -name "*.txt"
/tmp/b.txt
/tmp/hi.txt
/tmp/c.txt
/tmp/a.txt
[root@localhost ~]# find /tmp -name "*.txt" | wc -l
4
根据以上代码可知,find只是把查找的结果当作文本信息即文字去处理的;如果要把find找到的结果当作文件本身去处理,只能用exec选项。
[root@localhost ~]# find /tmp -name "*.txt" -exec rm -f {} \;
[root@localhost ~]# ls /tmp
fstab
ssh
ssh-6EILeL6rUloL
ssh-6IDz37axcGFG
ssh-eDcwzMdVYb4I
ssh-fUbPjvVRDC2t
ssh-g0uV0IOFTDkR
ssh-hXM50rqCnkdq
ssh-IrIrF4CNplbS
ssh-JkzGFaOr1bj2
ssh-KyNFmsVfPFaj
ssh-LuXSNRxmgaEy
ssh-R5e93KCqUHOw
ssh-rbOhvcvAr7ER
ssh-WJAQnpEtsmHZ
systemd-private-08b0606041ec4c4ea51b3a3a529f4abf-bolt.service-QOGGMo
systemd-private-08b0606041ec4c4ea51b3a3a529f4abf-chronyd.service-agT18r
systemd-private-08b0606041ec4c4ea51b3a3a529f4abf-colord.service-w16t8S
systemd-private-08b0606041ec4c4ea51b3a3a529f4abf-cups.service-KQVED1
systemd-private-08b0606041ec4c4ea51b3a3a529f4abf-fwupd.service-ky2eI2
systemd-private-08b0606041ec4c4ea51b3a3a529f4abf-rtkit-daemon.service-qq9tDD
systemd-private-13ec4c5a720a4c85a009ba4171f1824c-bolt.service-kvVAQM
systemd-private-13ec4c5a720a4c85a009ba4171f1824c-chronyd.service-IL3KFY
systemd-private-13ec4c5a720a4c85a009ba4171f1824c-colord.service-MROasI
systemd-private-13ec4c5a720a4c85a009ba4171f1824c-cups.service-O98c0A
systemd-private-13ec4c5a720a4c85a009ba4171f1824c-fwupd.service-Iui8DJ
systemd-private-13ec4c5a720a4c85a009ba4171f1824c-rtkit-daemon.service-iBay96
systemd-private-2cdc8aac4e144739b9811e1d148cf55a-bolt.service-YkFKlw
systemd-private-2cdc8aac4e144739b9811e1d148cf55a-chronyd.service-8KP2Wu
systemd-private-2cdc8aac4e144739b9811e1d148cf55a-colord.service-yIHxs1
systemd-private-2cdc8aac4e144739b9811e1d148cf55a-cups.service-qIKav1
systemd-private-2cdc8aac4e144739b9811e1d148cf55a-fwupd.service-wzJREQ
systemd-private-2cdc8aac4e144739b9811e1d148cf55a-rtkit-daemon.service-6AAV1o
systemd-private-645bd1a54f7345d7967c485a9232dd1d-bolt.service-WlzoXD
systemd-private-645bd1a54f7345d7967c485a9232dd1d-chronyd.service-W4RlYy
systemd-private-645bd1a54f7345d7967c485a9232dd1d-colord.service-uikaEl
systemd-private-645bd1a54f7345d7967c485a9232dd1d-cups.service-421Cbg
systemd-private-645bd1a54f7345d7967c485a9232dd1d-fwupd.service-AkHFUl
systemd-private-645bd1a54f7345d7967c485a9232dd1d-rtkit-daemon.service-mt8NuN
systemd-private-698a687b6c1744798d3d68891e532282-bolt.service-T5OxsL
systemd-private-698a687b6c1744798d3d68891e532282-chronyd.service-Hjbv1C
systemd-private-698a687b6c1744798d3d68891e532282-colord.service-BnX8Kk
systemd-private-698a687b6c1744798d3d68891e532282-cups.service-D7c8wW
systemd-private-698a687b6c1744798d3d68891e532282-fwupd.service-BcdN47
systemd-private-698a687b6c1744798d3d68891e532282-rtkit-daemon.service-tacYZx
systemd-private-79f282d3a4fa475fbbaf3c384286c6d6-bolt.service-7Rkldr
systemd-private-79f282d3a4fa475fbbaf3c384286c6d6-chronyd.service-LCRu3p
systemd-private-79f282d3a4fa475fbbaf3c384286c6d6-colord.service-zvAm4M
systemd-private-79f282d3a4fa475fbbaf3c384286c6d6-cups.service-XZVpMs
systemd-private-79f282d3a4fa475fbbaf3c384286c6d6-fwupd.service-vJWyqQ
systemd-private-79f282d3a4fa475fbbaf3c384286c6d6-rtkit-daemon.service-5kpmBm
systemd-private-855e0056410c43e680eb60fd93a7a3a4-bolt.service-aepUIL
systemd-private-855e0056410c43e680eb60fd93a7a3a4-chronyd.service-ketQpa
systemd-private-855e0056410c43e680eb60fd93a7a3a4-colord.service-eLnah1
systemd-private-855e0056410c43e680eb60fd93a7a3a4-cups.service-oPp075
systemd-private-855e0056410c43e680eb60fd93a7a3a4-fprintd.service-kqBHQj
systemd-private-855e0056410c43e680eb60fd93a7a3a4-fwupd.service-q5TIMj
systemd-private-855e0056410c43e680eb60fd93a7a3a4-rtkit-daemon.service-05jOs4
systemd-private-855e0056410c43e680eb60fd93a7a3a4-systemd-hostnamed.service-wIkVBO
systemd-private-855e0056410c43e680eb60fd93a7a3a4-systemd-localed.service-QUag8w
systemd-private-8cae014b17624b9fb41d8b1e3f4abd46-bolt.service-0542AA
systemd-private-8cae014b17624b9fb41d8b1e3f4abd46-chronyd.service-iOkmZW
systemd-private-8cae014b17624b9fb41d8b1e3f4abd46-colord.service-hla0Vh
systemd-private-8cae014b17624b9fb41d8b1e3f4abd46-cups.service-CADmxo
systemd-private-8cae014b17624b9fb41d8b1e3f4abd46-fwupd.service-WjE5KH
systemd-private-8cae014b17624b9fb41d8b1e3f4abd46-rtkit-daemon.service-KD1GxO
systemd-private-9b916b042cd1412a9ad90772ba885780-bolt.service-FdAOsg
systemd-private-9b916b042cd1412a9ad90772ba885780-chronyd.service-BHD8su
systemd-private-9b916b042cd1412a9ad90772ba885780-colord.service-FbgE8K
systemd-private-9b916b042cd1412a9ad90772ba885780-cups.service-z040fJ
systemd-private-9b916b042cd1412a9ad90772ba885780-fwupd.service-hNDQYN
systemd-private-9b916b042cd1412a9ad90772ba885780-rtkit-daemon.service-xImDfu
systemd-private-bc5d620438334f7bb6657e14fd73d4fe-bolt.service-AzXjbt
systemd-private-bc5d620438334f7bb6657e14fd73d4fe-chronyd.service-OMcX9A
systemd-private-bc5d620438334f7bb6657e14fd73d4fe-colord.service-qDwgcY
systemd-private-bc5d620438334f7bb6657e14fd73d4fe-cups.service-wuLAhW
systemd-private-bc5d620438334f7bb6657e14fd73d4fe-fwupd.service-wx5uhe
systemd-private-bc5d620438334f7bb6657e14fd73d4fe-rtkit-daemon.service-aiK6PD
systemd-private-d7827a8e28764b498bdac89056852937-bolt.service-hNg5Nc
systemd-private-d7827a8e28764b498bdac89056852937-chronyd.service-tTEHlD
systemd-private-d7827a8e28764b498bdac89056852937-colord.service-vvyQpP
systemd-private-d7827a8e28764b498bdac89056852937-cups.service-xvkxV2
systemd-private-d7827a8e28764b498bdac89056852937-fwupd.service-V8w9jJ
systemd-private-d7827a8e28764b498bdac89056852937-rtkit-daemon.service-dD1HRw
systemd-private-e18cb38ef37e449299c1e036bc30e783-bolt.service-OIE3fH
systemd-private-e18cb38ef37e449299c1e036bc30e783-chronyd.service-GM6m3L
systemd-private-e18cb38ef37e449299c1e036bc30e783-colord.service-udoUjP
systemd-private-e18cb38ef37e449299c1e036bc30e783-cups.service-WE1EEA
systemd-private-e18cb38ef37e449299c1e036bc30e783-fwupd.service-yJGGXv
systemd-private-e18cb38ef37e449299c1e036bc30e783-rtkit-daemon.service-EaDeuA
systemd-private-fb799913997e4bf0a847470a11a75b4e-bolt.service-7H6DHf
systemd-private-fb799913997e4bf0a847470a11a75b4e-chronyd.service-n3Xhhx
systemd-private-fb799913997e4bf0a847470a11a75b4e-colord.service-psZ7pT
systemd-private-fb799913997e4bf0a847470a11a75b4e-cups.service-psrG62
systemd-private-fb799913997e4bf0a847470a11a75b4e-fwupd.service-Zq3E4y
systemd-private-fb799913997e4bf0a847470a11a75b4e-rtkit-daemon.service-tj51Tr
tracker-extract-files.0
VMwareDnD
vmware-root_692-2696942994
vmware-root_698-2730496923
vmware-root_699-3979839557
vmware-root_702-2722304542
vmware-root_712-2957059153
vmware-root_720-2957714511
vmware-root_726-2957583432
vmware-root_731-4248811549
vmware-root_744-2957583465
vmware-root_747-4282367541
vmware-root_754-2965513717
yum_save_tx.2022-03-10.09-43.qyrFpH.yumtx
yum_save_tx.2022-03-10.14-51.g57qdA.yumtx
yum_save_tx.2022-03-10.14-51.i81R5X.yumtx
yum_save_tx.2022-03-10.14-51.sdFgwI.yumtx
yum_save_tx.2022-03-10.14-51.SIlu9v.yumtx
yum_save_tx.2022-03-10.14-51.Zqhlg2.yumtx
yum_save_tx.2022-03-13.16-11.iSDV9x.yumtx
yum_save_tx.2022-03-15.20-41.DU36vA.yumtx
yum_save_tx.2022-03-16.09-25.Qaz6uP.yumtx
yum_save_tx.2022-03-18.10-40.n_3dXq.yumtx
如果不使用exec选项,那么还可以使用管道符号"|"加上xargs选项实现与exec同样的效果,即可实现将find找到的结果当作文件处理。
3. xargs——find辅助命令
当在find命令中利用-exec选项对查找到的结果进行进一步处理时,有时可能会出现问题。这是因为-exec选项是将find查找到的所有结果一次性的给后面的命令进行处理,有时候find可能会找到大量文件,超出了后面命令所能处理的参数范围,这个时候可能会出现溢出错误,错误信息通常是"参数列太长"或"参数列溢出"。这时就可以使用xargs命令,它虽然是一个独立的Linux系统命令,但通常被用来配合find命令使用。通过xargs,可以将find所找到的结果分批次的送给之后的命令进行处理,从而避免之前所说的问题。
xargs命令需要通过管道与find命令配合使用,格式为:
|xargs commands
[root@localhost ~]# find /tmp/ -name "*.txt" | xargs grep "password"
/tmp/a.txt:password=123
[root@localhost ~]# find /tmp/ -name "*.txt" -exec grep "password" {} \;
password=123
xargs命令也可以与大括号使用,但需要加上-i选项,否则不支持
[root@localhost ~]# find /tmp/ -name "*.txt" | xargs -i cp {} /root
[root@localhost ~]# ls
aaa.txt b.txt inittab.bak test1 模板 文档 桌面
anaconda-ks.cfg c.txt rc.d test.txt 视频 下载
a.txt initial-setup-ks.cfg test 公共 图片 音乐