在bash中计算目录中的文件数

时间:2013-10-07 05:02:30

标签: bash unix

我有一个bash脚本,我试图找出目录中的文件数量并对其执行添加操作。

但是在做同样的事情时,我得到的错误如下:

admin> ./fileCount.sh
       1
./fileCount.sh: line 6: 22 + : syntax error: operand expected (error token is " ")

我的脚本如下所示:

#!/usr/bin/bash

Var1=22
Var2= ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l 

Var3= $(($Var1 + $Var2))
echo $Var3

任何人都可以指出错误在哪里。

2 个答案:

答案 0 :(得分:3)

稍微离开

由于@devnull已回答问题指出错误在哪里

还有一些想法:

一般

要进行此类浏览,有一个非常强大的命令find,可让您以递归的方式找到,正是您正在搜索的内容:

Var2=`find /stud_data/Input_Data/test3 -name '*.txt' | wc -l`

如果你不想这是递归的:

Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -name '*.txt' | wc -l`

如果您只想要文件(意思是没有符号链接,也没有目录)

Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -type f -name '*.txt' | wc -l`

依此类推......请阅读手册页:man find

特定解决方案

正如您的问题代表,您可以使用一些 bashism 来加快速度:

#!/bin/bash

Var1=22

VarLs=(/stud_data/Input_Data/test3/*.txt)

[ -e $VarLs ] && Var2=${#VarLs[@]} || Var2=0

Var3=$(( Var1 + Var2 ))

echo $Var3

# Uncomment next line to see more about current environment
# set | grep ^Var

bash扩展将在包含与jocker表单匹配的所有文件名的数组中翻译/path/*.txt

如果没有与表单匹配的文件,VarLs将仅包含jocker表单。

因此测试-e将更正此问题:如果返回列表的第一个文件存在,则将列表中的元素数量(${#VarLs[@]})分配给Var2否则,分配0Var2

答案 1 :(得分:2)

  

任何人都可以指出错误在哪里。

  • =周围不应有空格。
  • 您可能希望使用命令替换来捕获Var2中的结果。

尝试:

Var1=22
Var2=$(ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l)

Var3=$(($Var1 + $Var2))
echo $Var3

此外,你也可以说

Var3=$((Var1 + Var2))