1

我有一个包含文件的目录。存档非常大,里面有 150 万个 pdf 文件。
该目录存储在具有 OS V7R1 的 IBM i 服务器上,并且机器是新的并且速度非常快。
这些文件的名称如下:

invoice_[custno]_[year']_[invoice_number].pdf  
invoice_081500_2013_7534435564.pdf    

不,我尝试使用 Shell 使用 find 命令查找文件。

find  . -name 'invoice_2013_*.pdf'  -type f | ls -l > log.dat

该命令花费了很长时间,因此我中止了该操作,但没有任何结果。

如果我尝试使用较小的目录,一切正常。

后来我想要一份每天运行的工作,并找到过去 24 小时创建的文件,但我运行速度太慢了,我忘记了这一点。

4

4 回答 4

7

该调用永远不会起作用,因为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 万个文件进行模式搜索在任何文件系统上都是低效的。

于 2014-01-10T09:02:33.130 回答
1

为了只查看目录中的新条目列表,您可以考虑记录目录。您还可以指定INHERIT(*NO)阻止记录目录中的所有文件。然后您可以简单地使用DSPJRN提取最近的日记帐分录,以找出添加了哪些对象。

于 2014-01-14T03:13:58.227 回答
0

我认为我不会将超过 15k 的文件放在一个目录中。一些 QShell 实用程序在大约 16k 文件时遇到问题。但我不确定在任何情况下我都会将它们存储在一个目录中,除非超过 16MB 的那些如果占总数的很大一部分。我可能会先将它们存储在数据库中的 CLOB/BLOB 中。

存储为单个流文件对象会带来需要解决的所有权/权限问题。一些配置文件正在其拥有的对象表中获取条目,我希望该配置文件变得相当大。也许达到一个或多个极限。

通过存储在数据库中,您可以删除到单个拥有的对象。

或者可能是一些类似的对象......可能有一个清除/归档过程将行移到二级或三级表。很难猜测它可能需要如何构建,如果有的话。

保存也可以受益,尤其是 SAVSECDTA 和 SAV 保存。安全数据大大减少。保存一个 4GB 的表比保存一千个 4MB 的对象(或任何可能的故障)更快。

除了确定原始设置和实现如何在您的环境中进行之外,最棘手的部分可能涉及波动性。如果这些是变化相对较少、删除较少的稳定对象,应该没问题。但是,如果经常修改 BLOB,那么当表占用 DASD 容量的很大一部分时,就会带来麻烦。当它超过 DASD 可用空间的大小并且需要重新组织时,它会变得特别粗糙。由于波动性低,这不是一个问题。

于 2014-04-07T12:56:04.463 回答
0

通常在这种情况下所做的是创建子目录——也许通过使用每个文件的第一个字母。例如,文件 abcsdsjahdjhfdsfds.xyz 将存储在 /something/a/abcsdsjahdjhfdsfds.xyz 中,这将减少大小每个子目录..

于 2021-07-18T15:54:37.870 回答