首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将文件夹中的文件数作为变量获取?

如何将文件夹中的文件数作为变量获取?
EN

Stack Overflow用户
提问于 2012-06-21 11:09:12
回答 10查看 94.5K关注 0票数 31

使用bash,如何才能在没有解释器抱怨的情况下获得文件夹中的文件数量,而不是shell脚本中的目录?

在朋友的帮助下,我试着

代码语言:javascript
复制
$files=$(find ../ -maxdepth 1 -type f | sort -n)
$num=$("ls -l" | "grep ^-" | "wc -l")

它从命令行返回:

代码语言:javascript
复制
../1-prefix_blended_fused.jpg: No such file or directory
ls -l :  command not found
grep ^-: command not found
wc -l:   command not found

分别使用。这些命令在命令行上工作,但不能与bash脚本一起工作。

给定一个包含格式为1-pano.jpg的图像文件的文件,我希望获取目录中的所有图像,以获取最大的编号文件,以添加到正在处理的下一个图像上。

为什么会有这样的差异?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-06-21 12:21:13

引号导致了错误消息。

要获取目录中的文件数,请执行以下操作:

代码语言:javascript
复制
shopt -s nullglob
numfiles=(*)
numfiles=${#numfiles[@]}

它创建一个数组,然后将其替换为元素的计数。这将包括文件和目录,但不包括点文件、...或其他点分目录。

使用nullglob,这样空目录的计数就是0而不是1。

您可以改用find -type f,也可以计算目录数并减去:

代码语言:javascript
复制
# continuing from above
numdirs=(*/)
numdirs=${#numdirs[@]}
(( numfiles -= numdirs ))

另请参阅"How can I find the latest (newest, earliest, oldest) file in a directory?

你可以在一个执行块中有任意多的空格。它们通常有助于提高可读性。唯一的缺点是它们会使文件变得更大,并且可能会稍微减慢初始解析速度。有一些地方必须有空格(例如在比较中的[[[]]]=周围),还有一些地方不能有空格(例如在赋值中的=周围)。

票数 43
EN

Stack Overflow用户

发布于 2015-07-22 11:50:03

代码语言:javascript
复制
ls -l | grep -v ^d | wc -l

一句话。

票数 19
EN

Stack Overflow用户

发布于 2012-06-21 13:37:37

这样如何:

代码语言:javascript
复制
count=$(find .. -maxdepth 1 -type f|wc -l)
echo $count
let count=count+1 # Increase by one, for the next file number
echo $count

请注意,此解决方案效率不高:它为findwc命令生成子shells,但它应该可以工作。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11131020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档