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

現在のコマンドはディレクトリのエントリも一覧表示しますが、それらは検索によって再度一覧表示されるため、重複が発生します。

于 2012-06-12T21:32:21.423 に答える
0

次のように、find で -type f を使用する必要があります。

 find . -type f -exec ....
于 2012-06-12T22:01:17.403 に答える