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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

使用bash,如何在没有解释器报错的情况下从shell脚本中获取文件夹中的文件数(不包括目录)?

在朋友的帮助下,我试过

$files=$(find ../ -maxdepth 1 -type f | sort -n)
$num=$("ls -l" | "grep ^-" | "wc -l")

它从命令行返回:

../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,我想要获取目录中的所有图像,以获得最大的编号文件,以锁定下一个正在处理的图像。

为什么会有差异?

提问于
用户回答回答于

引号导致错误消息。

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

shopt -s nullglob
numfiles=(*)
numfiles=${#numfiles[@]}

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

使用nullglob因此,空目录给出的计数是0,而不是1。

你可以用find -type f或者您可以计算目录并减去:

# continuing from above
numdirs=(*/)
numdirs=${#numdirs[@]}
(( numfiles -= numdirs ))

用户回答回答于

不如:

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命令,但它应该能工作。

扫码关注云+社区