linux 查看文件夹下的文件个数(当前目录的文件数)

本文介绍了如何使用Linux命令来高效地查看文件夹下的文件数量和大小,包括普通文件和文件夹的数量,以及如何统计文件夹的总大小。通过ls-l、grep和wc命令的组合使用,实现复杂文件管理任务。

原文地址:http://blog.sina.com.cn/s/blog_56d8ea9001018w60.html 感谢作者!

ls -l |grep "^-"|wc -l

find ./company -type f | wc -l

查看某文件夹下文件的个数,包括子文件夹里的。

ls -lR|grep "^-"|wc -l

查看某文件夹下文件夹的个数,包括子文件夹里的。

ls -lR|grep "^d"|wc -l

说明:

ls -l

长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)

grep "^-"

这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

wc -l

统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于

一行信息对应一个文件,所以也就是文件的个数。

 

Linux查看文件夹大小

du -sh 查看当前文件夹大小

du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序

du -sk filename 查看指定文件大小

<think>我们在Linux文件夹文件个数时,通常使用`find`命令结合`wc`命令,或者使用`ls`命令结合`wc`命令。但需要注意的是,直接使用`ls`可能会包含目录本身,且如果文件名包含特殊字符(如换行符)可能会有问题。因此,更推荐使用`find`命令。 具体方法如下: 1. 当前目录下(不包括子目录)的普通文件个数: ```bash ls -l | grep "^-" | wc -l ``` 说明:`ls -l`列出详细信息,以`-`开头的行表示普通文件,`grep "^-"`过滤出普通文件,`wc -l`行数。 2. 当前目录下(包括子目录)的所有文件个数(包括普通文件目录): ```bash find . -type f | wc -l ``` 说明:`find . -type f`查找当前目录及其子目录下的所有普通文件,然后通过`wc -l`数量。 3. 如果只想当前目录下的文件(不包括子目录)且包括隐藏文件: ```bash ls -A | wc -l ``` 说明:`ls -A`列出当前目录下除`.`和`..`外的所有文件目录(包括隐藏文件),然后行数。注意,这会包括目录,所以如果只想文件,可以结合`grep`。 4. 当前目录下的文件(不包括子目录,包括隐藏文件,不包括目录): ```bash ls -lA | grep "^-" | wc -l ``` 5. 如果需要某个特定目录,可以在上述命令中指定目录路径,例如: ```bash find /path/to/directory -type f | wc -l ``` 注意:以上方法中,使用`find`命令文件时,默认会包含隐藏文件。另外,`find`命令在时不会将目录本身文件。 另外,还有一个需要注意的地方:如果文件名中包含换行符,那么使用`ls | wc -l`或`find | wc -l`可能会不准确(因为每个文件名一行,但如果有换行符则会被分割成多行)。为了避免这个问题,可以使用`find`的`-print0`结合`wc`的`-l`选项可能不行,因为`wc -l`是按行。所以更安全的方法是使用`find`的`-exec`或`-printf`来数。 更安全的方法(避免换行符问题): ```bash find /path/to/dir -type f -exec echo . \; | wc -l ``` 或者(使用`printf`) ```bash find /path/to/dir -type f -printf '.' | wc -c ``` 说明:`-printf '.'`表示每找到一个文件就打印一个点,然后`wc -c`点的个数(即文件个数)。 在实际应用中,如果确定文件名不含换行符,使用简单的`find | wc -l`即可。如果文件名可能包含换行符,则建议使用`-printf '.' | wc -c`。 因此,推荐使用: ```bash find /path/to/dir -type f -printf '.' | wc -c ``` 但是请注意,`-printf`是GNU find的特性,在非GNU系(如macOS)上可能不可用。在macOS上,可以使用: ```bash find /path/to/dir -type f -print0 | tr -d -c '\0' | wc -c ``` 说明:`-print0`使用空字符分隔文件名,`tr -d -c '\0'`删除所有非空字符,只保留空字符,然后`wc -c`空字符的个数(即文件个数)。或者使用: ```bash find /path/to/dir -type f | awk 'END {print NR}' ``` 这种方法仍然可能受到换行符影响,因为`find`默认输出是换行符分隔。所以最安全的方法还是避免在文件名中使用换行符。 综上所述,在大多数Linux(GNU find)中,我们可以这样当前目录及其子目录下的普通文件个数(包括隐藏文件): ```bash find . -type f -printf '.' | wc -c ``` 如果是在非GNU系,可以改用: ```bash find . -type f -print0 | tr -cd '\0' | wc -c ``` 或者(如果文件数不是特别多,且不介意性能): ```bash find . -type f | wc -l # 假设文件名不含换行符 ``` 注意:以上命令中的`.`可以替换为任意路径。 下面针对用户的问题,提供几种常见场景: 1. 当前目录(不含子目录)的文件个数(包括隐藏文件,不包括目录): ```bash ls -lA | grep -c '^-' ``` 2. 当前目录(含子目录)的文件个数(包括隐藏文件): ```bash find . -type f | wc -l # 假设没有换行符 ``` 3. 当前目录(含子目录)的目录个数: ```bash find . -type d | wc -l # 注意,此命令会包含当前目录(.)本身 ``` 4. 当前目录(不含子目录)的目录个数(包括隐藏目录): ```bash ls -lA | grep -c '^d' ``` 最后,我们总结一个最通用的方法(在GNU find可用时)来避免换行符问题: 文件: ```bash find . -type f -printf '.' | wc -c ``` 目录: ```bash find . -type d -printf '.' | wc -c ``` 注意:目录会包含当前目录(.)和所有子目录。 如果用户希望不包含当前目录(即从子目录开始数),可以: ```bash find . -mindepth 1 -type d -printf '.' | wc -c ``` 同样,对于文件,如果不想包含当前目录下的文件(只包含子目录下的文件),可以使用`-mindepth 1`。 因此,用户可以根据实际需要调整参数。 相关问题: 1. 如何Linux中某个目录下子目录个数(不包括隐藏目录)? 2. 如何使用Linux命令文件夹中不同文件类型的数量? 3. Linux中如何按文件扩展名分组文件数量? 4. 如何递归Linux目录下所有文件的行数? 5. 在Linux中,如何排除某些目录进行文件? </think>### Linux文件夹文件个数的方法 在Linux中,文件夹文件个数的常用方法有以下几种: #### 1. 使用 `ls` 和 `wc` 命令(不包含子目录) ```bash # 可见文件(不包括隐藏文件) ls -1 /目标目录 | wc -l # 所有文件(包括隐藏文件) ls -A1 /目标目录 | wc -l ``` - `-1`:单列显示 - `-A`:包含隐藏文件(排除 `.` 和 `..`) - `wc -l`:行数 > **注意**:此方法会目录本身,且不包含子目录文件 [^1]。 #### 2. 使用 `find` 命令(精确) ```bash # 仅文件(不包括目录) find /目标目录 -maxdepth 1 -type f | wc -l # 文件目录(不含子目录) find /目标目录 -maxdepth 1 | wc -l ``` - `-maxdepth 1`:不递归子目录 - `-type f`:仅匹配文件(排除目录) - 移除 `-type f` 可包含目录 > **优势**:准确区分文件/目录,避免符号链接干扰 [^2]。 #### 3. 递归(包含子目录) ```bash # 递归所有文件(排除目录) find /目标目录 -type f | wc -l # 递归所有文件目录 find /目标目录 | wc -l ``` - 移除 `-type f` 可包含子目录文件 - 添加 `-maxdepth N` 可限制递归深度 #### 4. 特定类型文件 ```bash # 所有 .txt 文件 find /目标目录 -maxdepth 1 -name "*.txt" | wc -l # 所有图片文件(递归) find /目标目录 -type f \( -name "*.jpg" -o -name "*.png" \) | wc -l ``` #### 注意事项 1. **隐藏文件**:Linux 以 `.` 开头的文件为隐藏文件,常规 `ls` 需加 `-A` 参数 2. **符号链接**:`find -type f` 默认不追踪符号链接,需添加 `-L` 参数 3. **性能比较**: - `ls + wc`:最快但不够精确 - `find`:速度较慢但结果最准确 > **示例**: `/home/user/docs` 下的非隐藏文件数: > ```bash > find /home/user/docs -maxdepth 1 -type f ! -name ".*" | wc -l > ``` --- ### 相关问题 1. 如何递归Linux目录中所有子文件夹数量? 2. Linux中如何按文件扩展名分组文件数量? 3. 使用 `du` 命令时如何排除特定文件类型? 4. 如何在Linux中快速超大目录文件数量? 5. 如何实时监控Linux目录文件数量变化? [^1]: `ls` 命令默认将目录视为"文件",需配合 `-d` 参数精确处理 [^^2]: `find` 的 `-type` 参数支持多种筛选:`f`(文件), `d`(目录), `l`(符号链接)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值