【发布时间】:2012-01-27 02:53:44
【问题描述】:
我有一个 bash 脚本,它可以根据用户输入压缩文件名。它运行良好,虽然速度很慢,因为我有时需要解析多达 50K 个文件。
find "$DIR" -name "$USERINPUT" -print | /usr/bin/zip -1 SearchResult -@
这里的 @ 符号表示 zip 将接受来自 STDIN 的文件名。有没有办法让它跑得更快?
我正在考虑创建一个 cron 作业来每晚更新定位数据库,但我不是 root,所以即使值得我也不这样做。
欢迎提出任何建议。
【问题讨论】:
-
首先我到美分:
type -d将使find只查找文件夹,所以原则上它应该有所作为。难道zip是这里的瓶颈?我会使用tar czfinsted 做一个测试来压缩文件,看看性能是否更好。 -
zip很可能是问题所在:我选择它是因为数据上的用户严格来说是窗口用户。我不知道 GZIP 或 TAR 是否可以在 MS Windows 上创建任何可读的内容。欢迎任何意见。 -
很难说你的瓶颈是什么。您确实应该首先分析这两个步骤,通过与压缩分开生成文件列表,将其放入临时文件而不是管道中。然后在每一步之前和之后调用
date。 -
尝试使用 -0 作为参数而不是 -1 只是为了看看差异。 -0 表示根本没有压缩,因此您应该尽量减少 CPU 负载/瓶颈的影响。正如@mvds 建议的那样,将作业分成两部分,看看查找需要多长时间,以及压缩需要多长时间。
-
鉴于进入 zip 文件的数据量很小,zip 不应该成为瓶颈。 zip 将在查找搜索中等待磁盘访问。根据下面的答案,在可用 CPU 允许的情况下,在单独的子目录结构路径上运行多个查找。