我有一个包含文件的目录。存档非常大,里面有150万个pdf文件 该目录存储在带有OS V7R1的IBM i服务器上,并且该机器是新的且速度非常快 这些文件的名称如下:
invoice_[custno]_[year']_[invoice_number].pdf
invoice_081500_2013_7534435564.pdf
我尝试使用命令行管理程序尝试使用find命令查找文件。
find . -name 'invoice_2013_*.pdf' -type f | ls -l > log.dat
命令花了很长时间,所以我中止了操作而没有结果。
如果我尝试使用较小的目录,一切正常。
后来我希望有一份工作能够在过去的24小时内完成,但我发现它运行的速度很慢,我可以忘记这一点。
答案 0 :(得分:6)
该调用永远不会起作用,因为ls
不会从stdin
读取文件名。
可能的解决方案是:
使用find
实用程序的内置列表选项:
find . -name 'invoice_2013_*.pdf' -type f -ls > log.dat
使用find
实用程序的-exec
选项为每个匹配的文件执行ls -l
:
find . -name 'invoice_2013_*.pdf' -type f -exec ls {} \; > log.dat
将文件名传递给xargs
实用程序,让它以文件名作为参数执行ls -l
:
find . -name 'invoice_2013_*.pdf' -type f | xargs ls -l > log.dat
在单个目录中对150万个文件进行模式搜索在任何文件系统上都是低效的。
答案 1 :(得分:1)
仅查看目录中的新条目列表,您可以考虑journaling the directory。您可以指定INHERIT(*NO)
以防止日记记录目录中的所有文件。然后,您可以使用DSPJRN简单地提取最近的日记帐分录,以找出已添加的对象。
答案 2 :(得分:0)
我认为我不会在一个目录中放置超过15k的文件。一些QShell实用程序在大约16k文件中遇到麻烦。但是我不确定在任何情况下我都会将它们存储在一个目录中,除非那些超过16MB,如果这是总数的很大一部分。我可能会先将它们存储在数据库中的CLOB / BLOB中。
存储为单个流文件对象会带来需要解决的所有权/权限问题。一些配置文件正在将条目添加到其拥有对象表中,并且我希望该配置文件变得非常大。也许达到一个或多个限制。
通过存储在数据库中,您可以转到单个拥有的对象。
或者也许是一些类似的对象......可能有一个清除/存档过程将行移到二级或三级表。如果有的话,很难猜测可能需要如何构建。
保存也可以受益,尤其是SAVSECDTA和SAV节省。安全数据大大减少。保存4GB的表比保存一千个4MB的对象(或任何可能的故障)更快。
除了确定原始设置和实施将如何适应您的环境之外,最棘手的部分可能涉及波动性。如果这些是变化相对较少且删除很少的稳定对象,那么应该没问题。但是如果BLOB经常被修改,当表占用DASD容量的很大一部分时,它会带来麻烦。当它超过DASD可用空间的大小并且需要重新组织时,它变得特别粗糙。由于波动性较低,因此不太关注。
答案 3 :(得分:0)
通常在这种情况下所做的是创建子目录——也许通过使用每个文件的第一个字母。例如,文件 abcsdsjahdjhfdsfds.xyz 将存储在 /某事/a/abcsdsjahdjhfdsfds.xyz 这将减少每个子目录的大小..