2012-06-12 118 views
0

我有一個腳本,用於查找批量filer設備上的文件。它每天搜索大約250,000個文件並創建一個簡單的報告,用於統計我們收到的多少文件,並按發件人($1)和日期($11)進行細分。查找結果重複

爲了提高效率,我在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

請出示單從管道的'find'部分輸出的例子。爲什麼'-print'不能執行你想要的而不是'-exec ls'? –

回答

1

嘗試ls -d而不是ls。從手冊頁:

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

您當前的命令列出的目錄中的條目爲好,然後由再次找到上市,從而導致重複。

+0

感謝您的幫助。使用'ls -d'讓我得到我想要的。接受並投票決定。 – Chris

0

你應該使用型的F中找到作爲

find . -type f -exec ....