我电脑里存了三千多部电影,多少一直没数清楚过。个影今天想整理一下,多少突然意识到一个最基础的个影问题:Linux系统里,到底该怎么统计影片文件的多少数量?
别笑。这问题看着简单,个影真做起来能把你绕晕。多少用`find`命令?个影`find /media/movies -type f -name "*.mp4" | wc -l`,这能数出mp4文件数。多少但我的个影片库里有mkv、avi、多少rmvb,个影还有那些该死的多少.srt字幕文件混在里面。直接数文件数,个影会把字幕、多少封面图、甚至.nfo信息文件全算进去——那数字虚高得离谱。
我试过最笨的办法:`find . -type f | wc -l`,得到4872。可我知道实际电影没那么多。后来翻了半天,才想起得用`-regex`过滤扩展名。写成这样:
find . -type f -regex '.*\.\(mp4\|mkv\|avi\|rmvb\|wmv\|flv\|mov\)$' | wc -l
这命令一跑,输出3412。嗯,这数字靠谱多了。
可问题又来了——有些电影是分上下集的,像《教父2》我存了两个文件,但算一部电影。还有些是蓝光原盘文件夹,里面全是m2ts文件,一个电影拆成几十个流文件。这时你光数文件数就没意义了。我后来改用目录名统计:
find /media/movies -mindepth 1 -maxdepth 1 -type d | wc -l
这样数出的是顶层文件夹数,每个文件夹代表一部电影(或一个系列)。我的库里是1987个目录,比文件数少了一大截,这才对味。
不过你要是嫌命令行太硬核,装个`ncdu`也行。这工具能可视化显示磁盘占用,按目录大小排序,一眼就能看出哪类影片占地方多。但它的统计单位是字节不是部数,你得自己对着目录名数——不实用。
还有个野路子,用`locate`。前提是你得先跑`updatedb`更新数据库。然后`locate -c '*.mkv'`直接输出计数。但这玩意儿有个坑:它会把系统里所有mkv都算上,包括缓存目录、临时文件里的。我上次这么数,多出来两百多个假影片。
说个真实翻车案例。上个月我帮朋友清理服务器,他信誓旦旦说片库有1500部。我用上面的正则一数,好家伙,才823。他还不信,结果发现他用了两年`ls | wc -l`来统计——把每个电影文件夹里的预告片、花絮、OST全算进去了。那多出来的677是啥?是他自己录的屏幕录像和下载的MV。
所以啊,统计影片数量这活儿,核心不是命令多高深,而是你得先想清楚“一部影片”的定义。按文件算?按目录算?按系列算?定义不同,答案差出好几倍。我现在都这么干:先按扩展名过滤出视频文件,再排除掉sample、trailer、extra这些关键词,最后数目录。一条命令搞定:
find . -type f \( -name "*.mp4" -o -name "*.mkv" \) ! -name "*sample*" ! -name "*trailer*" | sed 's|/[^/]*$||' | sort -u | wc -l
这命令把同一目录下的多个视频文件合并计数,精确到“每目录一部片”。跑完输出1987,跟我手动数的一样。
最后提醒一句:别迷信数字。我数出1987部,但有47部是重复收藏的不同压制版本,还有12部是那种“电影合集”文件夹,里面塞了十几部短片。真要看,可能也就1800部出头。统计工具只是帮你摸个底,真正要清理片库,还得靠眼睛和脑子。
