Unix 上的文件计数

FileCount on Unix

我正在尝试查找目录中的文件数。我正在使用 ls 命令。根据文件数量,我需要显示计数和一条消息。脚本未提供所需的输出。如有任何帮助,我们将不胜感激。

#!/bin/sh

FILECOUNT = $(ls /opt/report/ | grep *.ZIP_30 | wc -l);

if [ $FILECOUNT -gt "0" ]; then
      echo "Statistic.filecount: $FILECOUNT";
      echo "Message.filecount: Normal";
else
      echo "Statistic.filecount: $FILECOUNT";
      echo "Message.filecount: Warning";
fi;

exit 0;

您有一个语法错误。

shell 中 = 周围不允许有空格,因此:

filecount=$(grep -c ZIP_30 /opt/report/*)

一般建议不要解析 ls 的结果,因此我建议您使用以下命令:

find /opt/report/ -maxdepth 1 -name "*.ZIP_30" | wc -l

除了 and the quoting issue that William Pursell 评论的围绕 = 的语法错误外,还有一种更简单的计算文件数量的方法:使用 shell!

shopt -s nullglob
set -- /opt/report/*.ZIP_30
filecount=$#
if [ "$filecount" -gt 0 ]; then
      echo "Statistic.filecount: $filecount";
      echo "Message.filecount: Normal";
else
      echo "Statistic.filecount: $filecount";
      echo "Message.filecount: Warning";
fi;

exit 0;

基本思想是使用shell 的通配符(通配符)扩展功能将位置参数设置为匹配文件列表。对于完全没有匹配文件的情况,我使用了 bash shell 特性 (nullglob)。通常,shell 会留下 /opt/report/*.ZIP_30 文本作为空匹配的结果,但我们正在尝试对文件进行计数,因此我们希望它在没有任何匹配文件时消失。 $# 变量获取位置参数的数量,这为我们提供了文件计数。我还小写了 shell 变量号,作为防止破坏 built-in shell 变量名的好习惯。