サプライヤーからのデータを保存するマスファイラーデバイスをインストールしました。彼らは毎日 FTP ファイルを送信しており、現在、約 60,000 以上のファイルがあります。
find . -name '*TXT' -exec ls '{}' \; | wc -l
非常にゆっくりではありますが、実行するとうまくいきます。
ファイルをカウントするより速い方法はありますか?
サプライヤーからのデータを保存するマスファイラーデバイスをインストールしました。彼らは毎日 FTP ファイルを送信しており、現在、約 60,000 以上のファイルがあります。
find . -name '*TXT' -exec ls '{}' \; | wc -l
非常にゆっくりではありますが、実行するとうまくいきます。
ファイルをカウントするより速い方法はありますか?
なぜだけではないのですか
find . -name '*TXT' | wc -l
? 現在のコマンドは各ls
ファイルに対して不必要に生成されており、そのプロセスの生成自体は非常に遅くなります。私のシステムでの簡単なテストでは、40 倍のスピードアップが示唆されました。
GNU find を使用すると、これはわずかに高速になる可能性があります。
find . -name '*.TXT' -printf x | wc -c
またはPOSIXで
find . -name '*.TXT' -exec printf x%.s {} + | wc -c
バッシュで:
shopt -s globstar nullglob
そして、どちらか
files=(**/*.TXT)
nfiles=${#files[@]}
また
nfiles=$( printf "%s\n" **/*.TXT | wc -l )
どうですか
find . -name '*TXT' | wc -l