我在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设置为别名来为任何持续时间做类似的事情。如果没有,那么可能是一个要求参数的短脚本。
答案 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