Unix计数需要多个文件夹

时间:2017-03-23 01:08:36

标签: shell unix command-line

我在unix服务器上有一个目录。

cd /home/client/files

它有多个客户端文件夹,如下所示。

cd /home/client/files/ibm
cd /home/client/files/aol
cd /home/client/files/citi

他们都向我们发送一个文件,从下面的大小写开始:

pre-ibm-03222017
PRE-aol-170322

我们收到文件后,处理它们并将pre转换为pro,如下所示:

pro-ibm-03222017
PRO-aol-170322

我想计算每天处理的文件。这就是我要找的东西:

如果我能得到每个客户的总数,那就完美了。如果没有,那么总计数。

请记住,它包含以下所有文件:

cd /home/client/files/ibm
pre-ibm-03222017
pro-ibm-03222017

cd /home/client/files/aol
PRE-aol-170322
PRO-aol-170322

而且我想只计算PRO / pro,无论是大写还是大写。一个文件夹每天可以获得超过1个文件。

我使用以下命令:

 find /home/client/files -type f -mtime -1 -exec ls -1 {} \;| wc -l

但是它给了我pre和pro文件的总数,并且它还计算过去24小时的文件....而不仅仅是当天。

例如。目前是晚上9点。上述命令包括昨天在09:00 PM到12:00 AM之间收到的文件。我不会那些。换句话说,如果我在01:00 AM运行....它应该只有1小时的所有文件,而不是持续24小时。

由于

----更新-----

这对我很有用。

touch -t 201703230000 first
touch -t 201703232359 last
find /home/client/files/ -newer first ! -newer last | grep -i pro | wc -l

现在,我只是想知道我是否可以将上述内容作为参数传递。

例如,不是使用touch -t date和别名.....我只想输入快捷方式和日期来获取输出。我做了以下别名:

alias reset='touch -t `date +%m%d0000` /tmp/$$'
alias count='find /home/client/files/ -type f -newer /tmp/$$ -exec ls -1 {} \; | grep -i pro | wc -l'

这样一旦我登录到服务器,我输入重置然后我输入计数,然后我得到我的每日号码。

我想知道我是否可以通过将date1和date2设置为别名来为任何持续时间做类似的事情。如果没有,那么可能是一个要求参数的短脚本。

2 个答案:

答案 0 :(得分:0)

这个怎么样?

touch -t `date +%m%d0000` /tmp/$$
find /home/client/files -type f -newer /tmp/$$ -exec ls -1 {} \; | grep -i pro | wc -l
rm /tmp/$$

可以在此问题中找到查找今天创建的文件的其他选项: How do I find all the files that were created today

实际上,更好的方法是使用它:

find /home/client/files -type f -m 0 | grep -i pro | wc -l

您可以将-m 0替换为-m 5以查找5天前的文件。

答案 1 :(得分:0)

对于同一天的问题,你可以使用-daystart(GNU find)

正则表达式定义包含/ pre

find /home/client/files -regex '.*\/[pP][rR][eE].*' -type f -daystart -mtime -1 -exec ls -1 {} \;| wc -l