查看子文件夹中的文件个数
find /home/test -type f -printf '%h\n' | sort | uniq -c
/home/test 要查找的目录
-type 按文件类型查找
f:指普通文件 d:目录文件
-printf 打印输出
%h 文件目录
\n 新行
sort 排序
uniq -c 去重并统计次数
测试
创建文件
当前目录 /home/test, 创建3个子文件夹a,b,c, a中有1个文件,b中有2个文件,c中有3个文件
[root@localhost test]# mkdir a b c
[root@localhost test]# touch a/a1.txt b/b1.txt b/b2.txt c/c1.txt c/c2.txt c/c3.txt
[root@localhost test]# tree -a
.
├── a
│ └── a1.txt
├── b
│ ├── b1.txt
│ └── b2.txt
└── c
├── c1.txt
├── c2.txt
└── c3.txt
测试结果
[root@localhost test]# find /home/test -type f -printf '%h\n' | sort | uniq -c
1 /home/test/a
2 /home/test/b
3 /home/test/c
find命令解析
命令格式
find [path...] [OPTIONS] [TESTS] [ACTIONS]
其中:
`path...` : 要查找路径, 可以有多个
选项 OPTIONS
-maxdepth
levels: 子目录最大深度不超过levels
-mindepth
levels: 子目录最小深度不低于levels
-version
或 --version
: 打印版本号
测试 TESTS
下面的数字参数n 可以这样给出
+n
比n大
-n
比n小
n
正好是n
-amin n
:对文件的最近一次访问(比如 cat file)是在 n 分钟 (+n 就是n分钟之前, -n 就是n分钟以内)
-anewer file
: 对文件的最近一次访问比 file 修改时间要晚
-atime n
: 对文件的最近一次访问是在 n*24 小时之前
-cmin n
: 对文件状态的最近一次修改是在 n 分钟之前
-cnewer file
: 对文件状态的最近一次修改比 file 修改时间要晚
-ctime n
: 对文件状态的最近一次修改是在 n*24 小时之前
-mmin n
: 对文件数据的最近一次修改是在 n 分钟之前
-mtime n
: 对文件数据的最近一次修改是在 n*24 小时之前
-newer file
: 对文件的最近一次修改比 file 修改时间要晚
-name pattern
: 基本的文件名(将路径去掉了前面的目录)与shell模式pattern相匹配
-empty
: 文件是空的普通文件或者空目录
-type c
: 文件是 c
类型的, 可取的值有:
b
: 特殊块文件(缓冲的)
c
: 特殊字符文件(不缓冲)
d
: 目录
p
: 命名管道(FIFO)
f
: 普通文件
l
: 符号链接
s
: 套接字
动作 ACTIONS
-exec command
: 执行 command
-fls file
: 类似 -ls 但是像 -fprint 那样写入 file
-fprint file
: 将文件全名打印到文件 file 中
-fprint0 file
: 类似 -print0 但是像 -fprint 那样写入 file
-fprintf file format
: 类似 -printf 但是像 -fprint 那样写入 file
-print
: 打印文件全名,然后是一个换行符, 如果没有动作
则默认-print
-print0
: 打印文件全名,然后是一个null字符
-printf format
: 按照 format
的格式打印,注意-printf
不会在字符串末端添加一个新行,如果需要换行的话,在后面加上\n
,常用占位符有:
-n: 新行
-r: 回车
\t: 水平tab
\v: 竖直tab
\\: 输出自身'\'
%%: 输出自身'%'
%a: 文件最后一次存取的时间
%Ak: 文件最后一次存取的时间,格式以 `k` 指定, `k` 的部分格式如下,全部格式见文末参考连接
H: 小时 (00..23)
M: 分钟 (00..59)
S: 秒 (00..61)
T: 24小时格式的时间 (hh:mm:ss)
Y: 年份 (1970...)
m: 月份 (01..12)
d: 一个月当中的日子 (01..31)
%c: 文件状态最后一次修改的时间
%Ck: 文件状态最后一次修改的时间。格式以 k 指定,类似于%A
%f: 去掉了前面的目录的文件名
%g: 文件的组名
%h: 文件名的前面的目录部分
%k: 文件大小,以1kB 的块为单位
%s: 文件大小,以字节为单位
%p: 文件名
%P: 文件名,去掉了据以找到了文件的命令行参数的名称部分
%t: 文件最后一次修改的时间
%Tk: 文件最后一次修改的时间。格式以 k 指定,类似于%A
%u: 文件的用户名
参考
linux命令man find
find命令man中文手册
https://manpages.debian.org/unstable/manpages-zh/find.1.zh_CN.html