出于某种原因,我似乎在这里遇到了一些格式问题。我试图计算jvm目录中的文件数。我计算与已知整数进行比较(即文件应包含51个文件)。目的是确保所有文件都存在。基本上,这是一种快速而肮脏的方式,可以查看下载后是否存在所有文件,并将un-tar作为安装程序的一部分。最初我打算使用MD5(在某些方面它更理想,因为它会检查文件损坏),但它需要太长时间,我不能采用目录的MD5,所以我要么重新调整相关目录在计算或计算每个文件之前,这些文件过于繁琐。我不能使用差异,因为没有相同的目录可以比较。它所做的就是在开始安装之前检查所有必需的文件是否存在。如果有人可以推荐不同的策略,我会张扬耳朵。如果没有,这个简单的解决方案将有效,如果我让它正常工作。以下是我所做的一切:
首先找到jvm文件夹中的文件数(因为我们提供了jvm容器,所以总是应该是51)
COUNT=$(find jvm -type f | wc -l)
if [ "$COUNT" = "51" ]; then
YAY
else
OOPS
fi
出于某种原因,我认为第一个命令的输出包含空格,因此将所有输出都存储为字符串。比较发生时,它会失败。
此脚本必须同时在bash和sh
中运行答案 0 :(得分:1)
要正确计算Unix系统上的文件,请使用以下脚本:
c=0
while read -d '' line; do
((c++))
done < <(find jvm -maxdepth 1 -type f -print0)
echo $c
此脚本将使用空格或新行来处理文件名。
答案 1 :(得分:0)
你正在进行字符串比较:
if [ "$COUNT" = "51" ]
由于$count
是一个数字,请使用-eq
进行数字比较:
if [[ $COUNT -eq 51 ]]
这样,$COUNT
前面的空白区域不会影响比较。也不是双方括号。现在,这比单个方括号更受欢迎。当你忘记引号时,它不容易出错。
答案 2 :(得分:0)
你也可以使用简单的:
count=`find jvm -maxdepth 1 -type f -print0 | grep -zc '.'`
files
目录中的所有jvm
null terminated
字符串。-z
说grep接受null terminated
字符串作为输入(每个字符串是一个&#34;行&#34;)-c
计算匹配的&#34;行&#34; .
bash
和sh
兼容\n
)使用此功能,您还可以filter&count
文件名,例如
count=`find jvm -maxdepth 1 -type f -print0 | grep -zc '\.java'`
计算以.java
结尾的文件等。