我有一个脚本,可以在群发文件设备上查找文件。每天,它会搜索大约250,000个文件,并创建一个简单的报告,计算我们收到的文件数量,按发件人($1
)和日期($11
)细分。
为了提高效率,我在{(1}}中使用我的find()表达式中的加号来将文件名抓取到组中。
‑exec
它工作得很快但重复结果
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
还是有更好的方式?
答案 0 :(得分:1)
尝试使用ls -d
代替ls
。从联机帮助页:
-d, --directory
list directory entries instead of contents, and do not dereference symbolic links
您当前的命令也列出了目录的条目,然后通过查找再次列出,从而导致重复。
答案 1 :(得分:0)
你应该在find中使用-type f,如
find . -type f -exec ....