【问题标题】:shell script to count the no of incoming files in a directory in 10sec用于在 10 秒内计算目录中传入文件数量的 shell 脚本
【发布时间】:2013-09-16 04:26:23
【问题描述】:

我编写了一个 SHELL SCRIPT,它将计算目录中这些文件的数量(比如以分钟为单位)。

#!/bin/bash
LOCATION="D:/Dir1/*"
FILECOUNT=0
while true
do
  for item in $LOCATION
  do
    if [ -f $item ]
    then
       FILECOUNT=$[$FILECOUNT+1]
    fi
  done
  echo "No of files are $FILECOUNT"
  FILECOUNT=0
  sleep 30s
done

要求是这些文件会在几秒钟内自动删除。所以我们必须只计算不同的文件数。此外,我们不确定这些文件在目录中保留了多少秒。

请提供我应该对上述代码进行哪些更改。

【问题讨论】:

  • we have to count only the distinct no of files 是什么意思?你能在这里详细说明distinct吗?
  • 请忽略'distinct'

标签: bash shell


【解决方案1】:

如果您仍然在使用 Bash,请使用它的内置工具。

#!/bin/bash

files=( D:/Dir1/* )
echo Count: "${#files[@]}"

参见例如ASG chapter on arrays in Bash

如果您想查看在两次迭代之间添加或删除了哪些文件,请使用两个数组和compare them

同样,如果你想排除目录,你可以使用array intersectionD:/Dir1/*/.

最终,两个临时文件之间的简单diff 可能更接近您的实际需要。参见例如Monitor Directory for Changes

【讨论】:

  • 能否请您提供一个脚本来回答“如果您想查看在两次迭代之间添加或删除了哪些文件,请使用两个数组并进行比较。”
【解决方案2】:

你为什么不能这样做:

FILECOUNT=`find -type f $LOCATION | wc -l`

【讨论】:

  • 这将递归到子目录中。您可以添加-maxdepth 1 以禁用目录递归,如果您还想计算目录等,请删除-type f
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多