use*_*575 0 shell ibm-midrange ibm-ifs
我有一个包含文件的目录.存档非常大,里面有150万个pdf文件.
该目录存储在带有OS V7R1的IBM i服务器上,并且该机器是新的且速度非常快.
这些文件的名称如下:
invoice_[custno]_[year']_[invoice_number].pdf
invoice_081500_2013_7534435564.pdf
Run Code Online (Sandbox Code Playgroud)
不,我尝试使用命令行使用find命令查找文件.
find . -name 'invoice_2013_*.pdf' -type f | ls -l > log.dat
Run Code Online (Sandbox Code Playgroud)
命令花了很长时间,所以我中止了操作而没有结果.
如果我尝试使用较小的目录,一切正常.
后来我希望有一份工作能够在过去的24小时内运行,并且我发现这些文件运行速度太慢,我可以忘记这一点.
该调用永远不会起作用,因为ls不读取文件名stdin.
可能的解决方案是
使用该find实用程序的内置列表选项:
find . -name 'invoice_2013_*.pdf' -type f -ls > log.dat
Run Code Online (Sandbox Code Playgroud)
使用该find实用程序的-exec选项ls -l为每个匹配的文件执行:
find . -name 'invoice_2013_*.pdf' -type f -exec ls {} \; > log.dat
Run Code Online (Sandbox Code Playgroud)
将文件名传递给xargs实用程序,并ls -l使用文件名作为参数执行:
find . -name 'invoice_2013_*.pdf' -type f | xargs ls -l > log.dat
Run Code Online (Sandbox Code Playgroud)
在单个目录中搜索150万个文件对任何文件系统都是低效的.