find 命令

语法: find path 开关,参数,开关,参数

[yf@localhost ~]$ find / 2>/dev/null |wc -l
86294

[yf@localhost ~]$ find /etc -type d 2>/dev/null
[yf@localhost ~]$ find /etc -type f 2>/dev/null

[yf@localhost ~]$ (find /etc/ -type f -name "*conf"   | xargs cat |wc -l ) 2>/dev/null
6395
[yf@localhost ~]$ (find /etc/ -type f -name "*conf"   | xargs cat |wc -l) | xargs rm -f

参数:
-type: f,d,l,s
-name: conf , [0-9]m, ?m,
-size: 表示文件大小,M,K
+: +100m,大于100M
-:-20k,小于20k

[yf@localhost ~]$ find / -type f -size +100M  2>/dev/null
/proc/kcore
/var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/usr/lib/locale/locale-archive
/usr/lib/oracle/11.2/client64/lib/libociei.so
[yf@localhost ~]$ find / -type f -size +100M  2>/dev/null | xargs ls -l
-r--------. 1 root root 140737486266368 Dec  7 15:03 /proc/kcore
-rw-r--r--. 1 root root       106172832 Dec 27  2022 /usr/lib/locale/locale-archive
-rw-r--r--. 1 root root       118738042 Aug 25  2013 /usr/lib/oracle/11.2/client64/lib/libociei.so
-rw-r--r--. 1 root root       140219392 Nov 16 01:35 /var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite

举例:
查找出/etc下大于10k以conf结尾的文件总共有多少个字符。

-mtime
-ctime
-atime
time结尾表示天数
m表示modify,c表示create,a表示access
+,表示多几天之前
-,表示几天之内

-mmin
-cmin
-amin
和上面一样,不过是分钟表示。

-delete: 表示把找到文件直接删除
-exec: 执行shell命令,同时使用{} 代替前面的每一行结果,并且需要使用 \;进行结尾。

find . -type f -name "s*" -exec mv {} /tmp \;
find . -type f -exec mv {} "{}.bak" \;
举例:
求出大于5k的/etc/所有文件行数
find /etc -type f -size +5k -exec cat {} \; | wc -l
把这些文件内容合并当前etc.txt文件
find /etc -type f -size +5k -exec cat {} >>etc.txt \;

找出我一个星期之内C盘下载的高清视频,大小是1G以上,把这些复制到我的d:\backup

 find /mnt/c -type f -size +1000M -name "*mp4" -exec mv {} /mnt/d/backup \; 

-exec +号的用法

find 命令中,-exec 选项用于执行指定的命令。+\; 是两种不同的终止符,用于控制 -exec 的行为。

+ 的含义

使用 + 作为 -exec 选项的结束符,find 会尽可能地将多个匹配的文件传递给命令,而不是为每个文件单独执行一次命令。这种方式通常比使用 \; 更高效,因为它减少了命令执行的次数。

示例:

find /var/cache -name "*.cache" -atime +7 -exec rm {} +
  • {} +find 会将所有匹配的文件名一起传递给 rm 命令。例如,如果找到三个文件 file1.cachefile2.cachefile3.cachefind 会构造一个命令类似于 rm file1.cache file2.cache file3.cache 来删除这些文件。

\; 的含义

使用 \; 作为 -exec 选项的结束符,find 会对每个匹配的文件单独执行命令。这样每个文件都会单独触发一次命令执行,可能会导致效率较低。

示例:

find /var/cache -name "*.cache" -atime +7 -exec rm {} \;
  • {} \;find 会为每个匹配的文件单独执行一次 rm 命令。例如,如果找到三个文件 file1.cachefile2.cachefile3.cachefind 会构造三个命令 rm file1.cacherm file2.cacherm file3.cache 来删除这些文件。

总结

使用 +find 将多个文件作为参数一次性传递给命令,这通常比逐个传递更高效。

查看文件的详细属性(stat)

-c: 后台格式化字符串
%s: size
%n: name
%i:inode节点号

find /etc -type f -name "*conf" -exec stat -c fname:%n,size:%s,inode:%i {}  \; |column

查看未挂载磁盘及挂载磁盘 ( lsblk)

blk:block
lscpu
lspci
lsof
lsmod

[yf@localhost ~]$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   40G  0 disk
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   39G  0 part
  ├─centos-root 253:0    0   38G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]

查看磁盘的大小 (df)

[yf@localhost ~]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.1G     0  1.1G   0% /dev
tmpfs                    1.1G     0  1.1G   0% /dev/shm
tmpfs                    1.1G  8.9M  1.1G   1% /run
tmpfs                    1.1G     0  1.1G   0% /sys/fs/cgroup
/dev/mapper/centos-root   38G  2.0G   37G   6% /
/dev/vda1               1014M  150M  865M  15% /boot
tmpfs                    225M     0  225M   0% /run/user/1005
tmpfs                    225M     0  225M   0% /run/user/1000
tmpfs                    225M     0  225M   0% /run/user/1004
tmpfs                    225M     0  225M   0% /run/user/0
tmpfs                    225M     0  225M   0% /run/user/1001
[yf@localhost ~]$ df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  1.1G     0  1.1G   0% /dev
tmpfs                   tmpfs     1.1G     0  1.1G   0% /dev/shm
tmpfs                   tmpfs     1.1G  8.9M  1.1G   1% /run
tmpfs                   tmpfs     1.1G     0  1.1G   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        38G  2.0G   37G   6% /
/dev/vda1               xfs      1014M  150M  865M  15% /boot
tmpfs                   tmpfs     225M     0  225M   0% /run/user/1005
tmpfs                   tmpfs     225M     0  225M   0% /run/user/1000
tmpfs                   tmpfs     225M     0  225M   0% /run/user/1004
tmpfs                   tmpfs     225M     0  225M   0% /run/user/0
tmpfs                   tmpfs     225M     0  225M   0% /run/user/1001

查看目录的占用的磁盘空间(du)

du
-s:summary
-h: human,友好显示
-m,k,g ,表示单位

练习:

1) 找出操作系统下最近10天的修改文件,并且文件大于10M
2) 找出本机上所有的图片
find / -name “*(png|jpeg)”
3) 找出大于10M文件,并且显示每个文件的名称和字节数
4) 查找/etc/所有的目录,并且统计每个目录的占用的磁盘大小。

file命令

查看文件的格式,编码和用途。

作者:严锋  创建时间:2023-12-07 14:47
最后编辑:严锋  更新时间:2025-05-09 15:48