私の現在の解決策はfind <expr> -exec printf '.' \; | wc -c
ですが、これは10000を超える結果が出る場合にはそれほど時間がかかります。これを行うより速く/より良い方法はありませんか?bash - 検索結果を数える最善の方法は何ですか?
答えて
なぜないシンプルなポータブルソリューションとして
find <expr> | wc -l
?元の解決策は、見つかった個々のファイルごとに新しいプロセスprintf
を作成することです。これは(見つかったばかりの)非常に高価です。これはあなたが埋め込まれた改行を含むファイル名を持っている場合、オーバーしていますが、その後、私はあなたの問題ではなく、これを試してみてください
-1:改行でファイルが壊れてしまいます。= –
ファイル名/改行の制限が非常にまれであることを考えると、 *と*は上記のとおりです。もっとゆっくり ?おそらく。あなたがファイルシステムに問い合わせているとすれば、私は速度の違いが小さいと思っています。私の10,000ファイルの間で私は3msの差を測定する –
'find
:-)少し深く実行疑うことがあれば(find
の-printf
サポートを必要とする)すること
注:
find <expr> -type f -printf '.' | wc -c
これは、行を数えるよりも信頼性が高く、高速になります。
外部コマンドではなく、find
のprintf
を使用します。
レッツ・ベンチビット:
$ ls -1
a
e
l
ll.sh
r
t
y
z
私のスニペットのベンチマーク:フルラインで
$ time find -type f -printf '.' | wc -c
8
real 0m0.004s
user 0m0.000s
sys 0m0.007s
:
$ time find -type f | wc -l
8
real 0m0.006s
user 0m0.003s
sys 0m0.000s
だから私のソリューションは高速です=)(重要な部分はです0ライン)
@RandyHoward見つかった各ファイルの1つのドットは、見つかった各ファイルの1行に相当します。 –
同等ではなく、より信頼性があります=) –
ありがとう@MichaelFoukarakis、私は十分に見ていませんでした。おそらく、その使用法がここでは機能しないため、-printfは今使っているOS X上のfindにとって有効なオプションではありません。それはgnu拡張ですか?しかしこれはうまくいく:find
は、これが私の中countfiles
機能である私の~/.bashrc
(これは、Linux & FreeBSDのfind
のために働く必要があり、適度に高速だし、改行文字を含むファイルパスによってだまされていません。最終wc
だけNULバイト)をカウント:
countfiles()
{
command find "${1:-.}" -type f -name "${2:-*}" -print0 |
command tr -dc '\0' | command wc -c;
return 0
}
countfiles
countfiles ~ '*.txt'
このソリューションは、ここで他のfind -> wc
ソリューションの一部よりも確かに遅いですが、あなたはそれらをカウントに加えて、ファイル名を持つ他の何かを行うに傾いていた場合、あなたはfind
出力のread
になります。
n=0
while read -r -d ''; do
((n++)) # count
# maybe perform another act on file
done < <(find <expr> -print0)
echo $n
それが適切print0
を使用してNULバイト区切りfind
出力を行うと、ループの区切り文字として''
(NULバイト)を使用して、そこから読み取ることによって、非標準の名前のファイルを扱うBashGuideで見つかったa solutionの単なる変形例であり、 。
私はスピード競争でつまずくときに私は大好きです。検索/トイレを使用する場合と比較して ``
$ time (i=0; for d in /dev/sd*[a-z]; do ((i++)); done; echo $i)
25
real 0m0.001s
user 0m0.000s
sys 0m0.000s
: - トイレを使用して間違っている、しかし限り、私たちはベンチマーキングしていると何もここでは、ほとんどのポータブルかつ最速の解決策(と思う)ではありません
$ time find /dev/sd*[a-z] | wc -l
25
real 0m0.006s
user 0m0.000s
sys 0m0.004s
$ time find /dev/sd*[a-z] -printf . | wc -c
25
real 0m0.005s
user 0m0.000s
sys 0m0.000s
隠しファイルを考慮する必要がある場合は、forループに2つの引数を持たなければならないことに注意してください。for devfile in /dev/.* /dev/*; do ...
そして、それはもっと速くなります。
ハッピーハッキング!
'find'とbash globbingは同じではありません。ディレクトリを使って検索を行いますが、デフォルトでシェルのグロブは検索しません。 –
@ MechMK1正しいですが、このメソッドの再帰性はありません。おそらくそれはずっと速いのです。 –
また、実際のコメントが実行される前にbashが実際にglobbing *を拡張するので、実際にアイテムを見つけるのに時間がかかるプロセスは、 'time'が実行される前に行われます。 –
- 1. Flashにズームイン効果を与える最善の方法は何ですか?
- 2. ASP.Netの検索コントロールと同じページに検索結果を表示する最善の方法
- 3. フィールドバイアスの説明と検索結果の改善方法
- 4. 検索結果をカスタムbash関数に渡しますか?
- 5. 配列内の結果を検索する最速の方法
- 6. Ploneで検索結果を並べ替える方法
- 7. SilverStripe FullTextSearchableの検索結果を改善するには?
- 8. Outlook検索で検索結果を表示する方法
- 9. Googleの検索結果ページから検索結果の総数を抽出する方法
- 10. FaceRecognizer OpenCVで顔を訓練して最良の結果を得る最善の方法は何ですか?
- 11. 時間スパンを数える最善の方法は何ですか?
- 12. JOIN(SQL)の結果をフィルタリングする最善の方法は
- 13. いいえ検索結果
- 14. Solrの検索結果にSVDアルゴリズムを実装する最も簡単な方法は何ですか?
- 15. サーバからモバイルクライアントへの結果を返す最善の方法
- 16. 「何の検索結果は、」データベース
- 17. 検索結果の数を表示する方法(カスタム検索スクリプト)
- 18. GitHubを検索する最良の方法は何ですか?
- 19. 検索結果を検索する方法はありますか?
- 20. iPhoneアプリケーションへの結果を解析する最善の方法
- 21. は、シェフの検索APIで結果をフィルタリングする方法
- 22. Typo3 - 索引検索結果をページタイトルで注文する方法?
- 23. 全文検索の結果の数を最小にする
- 24. "逆ブール検索"または(ブールルール付き)キーワードでサブスクリプションを作成する最善の方法は何ですか?
- 25. javaのWikipediaダンプからテキストを検索する最善の方法は何ですか?
- 26. レディスでリーグ名でサッカーゲームを検索する最善の方法は何ですか?
- 27. APiの結果を繰り返し処理する最善の方法は何ですか?
- 28. Google検索結果のモバイルアイコンとは何ですか?
- 29. Xamarin.Forms - ファイルを検索するダイアログを開く最善の方法
- 30. Resharperの "検索結果ウィンドウ"でテキスト検索結果を表示
あなたの検索結果にwc -lを使用してください。 –