0

我有一个在海量文件管理器设备上查找文件的脚本。每天,它搜索大约 250,000 个文件并创建一个简单的报告,计算我们收到的文件数量,按发件人 ( $1) 和日期 ( $11) 细分。

为了提高效率,我‑exec在 find() 表达式中使用加号来将文件名分组。

find . -exec ls '{}' +| awk -F~ '{print $1"\t"$11}'|sort|uniq -c

它工作得很快,但会像这样重复结果

  9632 ./Reynosa    20120607
   9632 Reynosa 20120607
  20328 ./Reynosa   20120608
  20328 Reynosa 20120608
  15354 ./Reynosa   20120609
  15354 Reynosa 20120609

我究竟做错了什么?我应该使用 basename剥离./还是有更好的方法?

4

2 回答 2

1

尝试ls -d代替ls. 从手册页:

-d, --directory
          list directory entries instead of contents, and do not  dereference symbolic links

您当前的命令也列出了目录的条目,然后通过 find 再次列出这些条目,从而导致重复。

于 2012-06-12T21:32:21.423 回答
0

你应该在 find 中使用 -type f

 find . -type f -exec ....
于 2012-06-12T22:01:17.403 回答