我们刚刚安装了一个海量文件管理设备,我们希望在该设备上存储来自供应商的数据。他们每天都通过 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 倍。
怎么样
find . -name '*TXT' | wc -l
使用 GNU find,这可能会稍微快一些:
find . -name '*.TXT' -printf x | wc -c
或使用 POSIX
find . -name '*.TXT' -exec printf x%.s {} + | wc -c
用 bash:
shopt -s globstar nullglob
然后,要么
files=(**/*.TXT)
nfiles=${#files[@]}
或者
nfiles=$( printf "%s\n" **/*.TXT | wc -l )