我有一个由imapsync用来存储自己的caching文件夹。 这样的文件夹包含我正在同步的每个邮箱的子文件夹,仅此而已:
[dv@monitor] find * -maxdepth 0 -type d | wc -l 126 [dv@monitor] find * -maxdepth 0 | wc -l 126
每个子文件夹复制相关用户/邮箱的邮箱结构( 注意: imapsync会跟踪目标邮件服务器,因此它也会添加对它的引用,并保留为下面示例中的其他文件夹结构: 10.0.1.235 )。
[dv@monitor] find director -type d director director/10.0.1.235 director/10.0.1.235/director director/10.0.1.235/director/Deleted Items director/10.0.1.235/director/Deleted Items/Deleted Items director/10.0.1.235/director/Contacts director/10.0.1.235/director/Contacts/Contacts [....] director/10.0.1.235/director/INBOX [...]
在每个子文件夹内, imapsync为每个同步消息存储一个文件:
[dv@monitor] ls -l segreteria/10.0.1.235/segreteria/INBOX/INBOX | head -n 10 totale 0 -rw-r--r-- 1 root root 0 19 set 23:36 1000_109 -rw-r--r-- 1 root root 0 19 set 23:36 10009_1342 -rw-r--r-- 1 root root 0 19 set 23:36 10011_1343 -rw-r--r-- 1 root root 0 19 set 23:36 10013_1344 -rw-r--r-- 1 root root 0 19 set 23:36 10028_1345 -rw-r--r-- 1 root root 0 19 set 23:36 10042_1346 -rw-r--r-- 1 root root 0 19 set 23:36 10046_1347 -rw-r--r-- 1 root root 0 19 set 23:36 10048_1348 -rw-r--r-- 1 root root 0 19 set 23:36 10050_1349
现在,因为我目前正在排除imapsync问题,所以我需要快速识别确实存在同步问题的邮箱。 基本上, 我只需要计算每个第一级文件夹中存储的文件的数量 。
由于我是“ 发现是一个伟大的程序,了解它! ”的概念,我的第一个猜测一直是这样的:
[**NOT WORKING**] find * -type d -maxdepth 0 -exec 'find {} -type f | wc -l' \;
但它没有奏效。
经过30多分钟的基于互联网的search和学习,甚至在阅读了另一篇StackOverflow的文章之后 ,我已经(温和地)成功地使用了:
find * -maxdepth 0 -type d -exec sh -c "echo -n {} ; echo -n : ; find {} -type f | wc -l" \;
请注意,在上面find的第一个{}正确扩展了一级文件夹的名字,而第二个{}正确扩展了这里包含的每个文件。
不幸的是,输出的forms是<mailbox>:<number_of_messages>如:
director:25 sv:25 segreteria:11532 registration:146 newsletter:240
我仍然缺less的是根据消息数量sort输出的简单forms。 如果输出反转( <number_of_messages>:<mailbox> ),一个简单的:
.... | sort -n
将解决我的需求, 只有9个额外的字符 。
所以我试图改变嵌套find内的echo顺序。 就像是:
[**not working**] find * -type d -maxdepth 0 -exec sh -c "find {} -type f | wc -l ; echo -n : ; echo -n {} ;" \;
但没有奏效,可能是由于需要以相反的顺序展开(第一次出现的{}被第二次find扩展;第二次出现的{}被第一次find扩展)。
所以,以上所有的介绍,有人可以指出我如何适应这个(正常工作)单线:
find * -maxdepth 0 -type d -exec sh -c "echo -n {} ; echo -n : ; find {} -type f | wc -l" \;
通过这种方式来反转输出( <number>:<mailbox>或甚至更好<number><space><mailbox> )?
(PS:显然有很多方法可以实现这个目标,至于我自己,我不会在3/4行perl脚本中分割/反转每一行的输出,我对解决scheme感兴趣这将需要一个“轻微增加”的字符,像| sort -n 。无论如何,每一个提示/build议,欢迎)
与其试图将嵌套find oneliner的输出调整为sort的默认行为,我build议您告诉sort在哪里查找sorting关键字:
... | sort -t: -k2n
这当然假设你的一级目录名都不包含冒号。