find文件查找

find基础语法

 find [路径] [选项] [表达式] [动作]

 -user 和 -group:按文件所有者和所属组查找。
-exec 和 -ok:对查找到的每个文件执行指定的命令。
-maxdepth:限制查找深度,避免进入子目录时过多地占用系统资源。
-mindepth:设置最小深度,避免在根目录下查找时包含一些不必要的文件。
-follow:跟随符号链接进行查找。
-prune:排除某些目录或文件,不在查找范围内。
-print:将查找结果输出到标准输出。

xargs命令

xargs
#选项:
-n 指定每次传递给命令的参数个数

。
-I 定义替换字符串。
-0 使用空格分隔输入数据。
-a 指定输入数据来源文件。

#实例:
$ find . -name "*.txt" | xargs rm                         #将当前目录下所有以 .txt 结尾的文件都删除:

$ ls | xargs -I {} chmod 644 {}                           #-I 选项:定义替换字符串。例如,将当前设置当前目录下所有文件的权限设置为 644:

$ find . -name "*.txt" -print0 | xargs -0 cp -t /tmp      #将当前目录下所有以 .txt 结尾的文件复制到 /tmp 目录:

$ xargs -a file.txt rm                                    #将 file.txt 中列出的文件全部删除:

#-i和-I的区别
xargs 命令中的 -i 和 -I 都是用于指定替换字符串的选项,但它们具有细微的区别。

-i 选项在命令行中指定一个替换字符串,并将其用作占位符来代表标准输入中的每个参数。例如:

$ echo "apple banana cherry" | xargs -i echo {} pie apple pie banana pie cherry pie
在上面的例子中,-i 后跟着占位符 {},表示标准输入中的每个参数都将替换为 {}。因此,echo {} pie 实际上会被扩展为 echo apple pie、echo banana pie 和 echo cherry pie。

另一方面,-I 选项与 -i 类似,但允许您使用自定义的替换字符串。例如:

$ echo "apple banana cherry" | xargs -I FRUIT echo FRUIT pie apple pie banana pie cherry pie
在上面的例子中,-I 后跟着一个自定义的替换字符串 FRUIT,表示标准输入中的每个参数都将替换为 FRUIT。因此,echo FRUIT pie 实际上会被扩展为 echo apple pie、echo banana pie 和 echo cherry pie。

tree命令

# 分流到文件
ip addr |grep 'inet ' |tee ip.txt |awk -
F"/" '{print $1}' |awk '{print $2}'
# 分流到终端
ip addr |grep 'inet ' |tee /dev/pts/0 |awk
-F"/" '{print $1}' |awk '{print $2}'

find选项

-type:
f:可编辑的文件
d:目录
l:软链接文件
b:块设备文件 磁盘,U盘 /dev/sda
c:字符设备文件 终端
s:socket 安全套接字文件
p:管道文件

[root@web ~]# find /run -type s
/run/containerd/s/c72d9ae47e7c50a120da28438b1df5c9d98259f72599fdcb4bcf48e23accd1f1
/run/containerd/s/ea57628d123d926db463a43e9ec830be84a6fcc6ac8a9b2a396b95dea2da2cdd
/run/containerd/s/68560c1ce2ed5fa09fe1057d5145cd3b62b2d14c75a54fd385506a60b125c88f
/run/containerd/s/f271861e46e7205bff5faf427d79dfb3b3342fda11cde646cf8467b0f1f4d666
/run/containerd/s/443c4249f4b77bea40ee1bb08d3b64a6f12156a608a12bdd0e4a8f51635ff78a
/run/containerd/s/694a84781120b180d92c089eb47b855b3612243a94fe8a996f0b4f25be6dec32
/run/containerd/s/dd38e49e2df8bc7e0d0775c6fd451551a89aaee8bc41461dd31180b8b63e8f26
/run/containerd/s/2ace22d456edc1437d908df3b57a892147bf4e2bc8cea7fce3ae368a95902bc6
/run/docker.sock
/run/docker/libnetwork/1fd703f5ef93.sock
/run/docker/metrics.sock
/run/docker/containerd/containerd.sock
/run/docker/containerd/containerd.sock.ttrpc
/run/docker/containerd/containerd-debug.sock
/run/vmware/guestServicePipe
/run/dbus/system_bus_socket
/run/udev/control
/run/systemd/shutdownd
/run/systemd/private
/run/systemd/journal/socket
/run/systemd/journal/stdout
/run/systemd/cgroups-agent
/run/systemd/notify

# 查看找出文件的详细信息↓
[root@web ~]# find /run -type s|xargs ls -l
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/2ace22d456edc1437d908df3b57a892147bf4e2bc8cea7fce3ae368a95902bc6
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/443c4249f4b77bea40ee1bb08d3b64a6f12156a608a12bdd0e4a8f51635ff78a
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/68560c1ce2ed5fa09fe1057d5145cd3b62b2d14c75a54fd385506a60b125c88f
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/694a84781120b180d92c089eb47b855b3612243a94fe8a996f0b4f25be6dec32
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/c72d9ae47e7c50a120da28438b1df5c9d98259f72599fdcb4bcf48e23accd1f1
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/dd38e49e2df8bc7e0d0775c6fd451551a89aaee8bc41461dd31180b8b63e8f26
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/ea57628d123d926db463a43e9ec830be84a6fcc6ac8a9b2a396b95dea2da2cdd
srw------- 1 root root 0 Jul  5 08:41 /run/containerd/s/f271861e46e7205bff5faf427d79dfb3b3342fda11cde646cf8467b0f1f4d666
srw-rw-rw- 1 root root 0 Jul  5 08:41 /run/dbus/system_bus_socket
srw-rw---- 1 root root 0 Jul  5 08:41 /run/docker/containerd/containerd-debug.sock
srw-rw---- 1 root root 0 Jul  5 08:41 /run/docker/containerd/containerd.sock
srw-rw---- 1 root root 0 Jul  5 08:41 /run/docker/containerd/containerd.sock.ttrpc
srw------- 1 root root 0 Jul  5 08:41 /run/docker/libnetwork/1fd703f5ef93.sock
srwxr-xr-x 1 root root 0 Jul  5 08:41 /run/docker/metrics.sock
srw-rw---- 1 root root 0 Jul  5 08:41 /run/docker.sock
srwx------ 1 root root 0 Jul  5 08:41 /run/systemd/cgroups-agent
srw-rw-rw- 1 root root 0 Jul  5 08:41 /run/systemd/journal/socket
srw-rw-rw- 1 root root 0 Jul  5 08:41 /run/systemd/journal/stdout
srwxrwxrwx 1 root root 0 Jul  5 08:41 /run/systemd/notify
srwxrwxrwx 1 root root 0 Jul  5 08:41 /run/systemd/private
srw------- 1 root root 0 Jul  5 08:41 /run/systemd/shutdownd
srw------- 1 root root 0 Jul  5 08:41 /run/udev/control
srw-rw-rw- 1 root root 0 Jul  5 08:41 /run/vmware/guestServicePipe

# 查询/etc/目录下所有目录,总共有多少个?
[root@web ~]# find /etc -type d|wc -l
597

按文件大小查找

-size
-:小于
+:大于
Num:精准但是又不精准的匹配

find /root -size 5M              #在/root下查找大小为5M的文件
find /root -size -5M -a +1M      #在/root下查找大小为小于5M大于1M的文件

按用户查找

#根据用户查找
-user  指定文件属主名
-uid   指定文件属主uid    
-group 指定文件属组名

du -sh 文件路径                     #查看文件精准大小

按文件名查找

## -name:严格区分大小写
[root@web ~]# find / -name 'hg'
/root/hg
/var/db/sudo/lectured/hg

[root@web ~]# find / -name 'HG'
/root/HG

## -iname:不区分大小写
[root@web ~]# find / -iname 'HG'
/root/hg
/root/HG
/var/db/sudo/lectured/hg

按文件时间查找

#-mtime 选项:按文件内容修改时间查找,即最后一次修改文件内容的时间。
例如,使用 -mtime -7 查找7天内修改过的文件。
#-atime 选项:按文件访问时间查找,即最后一次读取或执行文件的时间。
例如,使用 -atime +30 查找30天前未被读取或执行的文件。
#-ctime 选项:按文件状态改变时间查找,即文件的权限、所有权或链接关系等发生变化的时间。
例如,使用 -ctime -365 查找365天内状态发生过变化的文件。

例:
root@localhost:~#find / -type f -name "*.txt" -atime -7
查找/下的文件名字为.txt并七天内修改过的文件,包含当天的
root@localhost:~#find / -type f -name "*.txt" -atime 7
查找/下的文件名字为.txt并往前数七天内修改过的文件,不包含当天的
root@localhost:~#find / -type f -name "*.txt" -atime +7
查找/下的文件名字为.txt并七天内修改过的文件,不包含当天的

# 查看三种时间
[root@web ~]# stat hg
  File: ‘hg’
  Size: 40          Blocks: 0          IO Block: 4096   directory
Device: 803h/2051d  Inode: 53511493    Links: 3
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-07-05 20:15:28.005020391 +0800
Modify: 2023-07-02 22:42:47.166899836 +0800
Change: 2023-07-02 22:42:47.166899836 +0800
 Birth: -

## 保留近七天的文件    # !:取反
[root@web ~]# find /opt/ ! -mtime -7|xargs rm -f

多条件组合查找

# 可将多个查找选项 组合在一起进行查找
[root@web ~]# find /opt/ -type f -user root
/opt/1.abc
/opt/123.txt
/opt/disk

按权限查找

#-perm:按文件权限查找,可以使用三位数字形式表示文件权限,
例如 -perm 644 表示查找权限为 644 的文件。

例:
# 精确查找
-perm 222
# 模糊匹配-后面的对应权限
-perm -222
#包含set uid
[root@web ~]# find /usr/sbin -perm -4000 -ls
#包含set gid
[root@web ~]# find /usr/sbin -perm -2000 -ls
#包含sticky
[root@web ~]# find /usr/sbin -perm -1000 -ls

-exec:对查找到的每个文件执行指定的命令。后面跟自定义shell命令(标准写法-exec\;)
find ./ -type f -name 7.txt -exec cp {} /tmp \;
-ok:对查找到的每个文件执行指定的命令。会提示确认操作。
find ./ -type f -name 6.txt -ok cp {} /tmp \;
< cp ... ./6.txt > ? y

按深度查找

-maxdepth
针对目录层级查找

# 查找/etc/目录下的所有1级和2级目录
[root@web ~]# find /etc/ -type d -maxdepth 2
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

/etc/
/etc/grub.d
/etc/pki
/etc/pki/rpm-gpg
/etc/pki/ca-trust
/etc/pki/java
/etc/pki/tls
/etc/pki/CA
...

find动作

-print:打印查找到的内容到终端上(find命令默认就是打印结果 -print)

-ls:查看文件的详细信息 |xargs ls -l 或者 ls -l $(find xxx) 或者 ls -l `find xxx`

-delete:删除查找到的文件(bug跟ls,ls看不见的,也删除不掉)并且只能删除空目录

其他删除方法: |xargs rm -fr 或者 rm -fr $(find xxx) 或者 rm -fr `find xxx`

-ok:找到文件后,执行后面的bash命令,询问是否要操作

find多条件

-a:和,并且(默认为-a)
-o:或者
!:取反