bash命令查看当前目录下文件个数
目录
【bash】命令查看当前目录下文件个数
要用 ls 查看当前目录下的文件个数,可以结合 wc -l
来统计行数:
ls -1 | wc -l
说明:
ls -1
:以一行一个文件的方式列出。wc -l
:统计行数,也就是文件/目录的数量。
⚠️ 需要注意:
- 这个方法会把文件和子目录都算进去。
- 如果要统计仅文件数(排除目录),可以用:
ls -l | grep "^-" | wc -l
- 如果要统计仅目录数:
ls -l | grep "^d" | wc -l
例如
ls -1 | wc -l
35
问题:比实际的多了3个数目
您好!您的怀疑非常敏锐,直击问题核心。
是的,问题就出在 ls -al | wc -l
这个指令上。它并不是一个精确的文件计数方法。
为什么 ls -al | wc -l
的结果不准确?
当您运行 ls -al
时,它列出的内容除了您目录下的文件外,还额外包含了至少三行:
total
行: 输出的第一行,显示了目录下所有文件的磁盘空间总占用量。.
(当前目录): 代表当前目录自身的条目。..
(上级目录): 代表父级目录的条目。
因此,ls -al | wc -l
的结果总是会比实际的文件(和子目录)数量多至少3个。
在您的情况下,293 - 3 = 290,这正好与您的数据库记录数和脚本诊断出的文件数完全吻合。
哪个是正确的?
您脚本中的诊断工具 (find_missing_records
) 得到的结果是准确的。
因为它采用的方法是:
os.listdir(MEDIA_MP4_DIR)
: 获取目录下所有条目的列表(不包含.
和..
)。if f.endswith('.mp4')
: 精确地筛选出只以.mp4
结尾的文件。
这个方法确保了它只计算您真正关心的MP4文件,不多也不少。
如何在命令行中精确计数?
如果您想在命令行中得到和脚本一样的精确文件数,可以使用以下指令:
# 只计算当前目录下的文件和文件夹数量(不含.和..)
ls -1 | wc -l
# (更精确) 只计算当前目录下的文件数量(不包括子目录)
find . -maxdepth 1 -type f | wc -l
# (最相关) 只计算当前目录下的MP4文件数量
find . -maxdepth 1 -type f -name "*.mp4" | wc -l