shell - 递归查找具有特定扩展名的文件数的脚本
问题描述
我们有一个高度嵌套的目录结构,我们有一个目录,我们称之为“我的目录”,在我们的层次结构中出现了很多次。我有兴趣计算所有名为“my Dir”的目录中“*.csv”文件的数量(是的,名称中有一个空格)。我该怎么办?
我尝试过这样的事情,但它不起作用:
find . -type d -name "my Dir" -exec ls "{}/*.csv" \; | wc -l
解决方案
如果您想要在“我的目录”下匹配模式 '*.csv'的文件数,那么:
- 不要要求
-type d
; 索取-type f
- 不要问
-name "my Dir"
你是否真的想要-name '*.csv'
- 不要尝试
ls *.csv
每场比赛,因为如果目录中有更多的 N csv 文件,您可能会计算每个 N 次 - 还要小心
{}
嵌入-exec
代码!
对于来自 的文件计数find
,我喜欢使用从U&L 上的Stéphane Chazelas学到的技巧;例如,来自:Counting files in Linux:
find "my Dir" -type f -name '*.csv' -printf . | wc -c
这需要 GNU find
,因为-printf
它是 POSIX 标准的 GNU 扩展。
它通过在“我的目录”(从当前工作目录)中查找与模式匹配的文件来工作;对于每个匹配的文件,它会打印一个点(句点);这一切都通过管道传递给wc
谁计算了产生的字符(句点)find
的数量——匹配文件的数量。
推荐阅读
- python - 在 Django 中按 ManyToManyField 对 QuerySet 进行排序
- java - Android 在帖子中崩溃到之前的屏幕调试
- ruby-on-rails - 球童不渲染资产
- flutter - 与 vs 代码一起颤动
- python - 在读取 JSON 时用 Python 中的反斜杠替换反斜杠'\"'
- regex - 如何编写从 NMAP 扫描中提取 IP 的 Ruby 脚本
- c++ - 指针算术计算
- linux - 通过设置 pam_faildelay 更改登录尝试失败的持续时间。因此延迟不生效
- algorithm - 安排会议问题(根据投资者的可用性计算所有者可以安排多少次会议)
- r - 在ggplot2中的折线图中添加显着性星号