<p>给定一个包含大量小文件(大于100万)的目录,有什么方法可以快速记住哪些文件已被处理(用于数据库导入)。在</p>
<p>我尝试的第一个解决方案是bash脚本:</p>
<pre><code>#find all gz files
for f in $(find $rawdatapath -name '*.gz'); do
filename=`basename $f`
#check whether the filename is already contained in the process list
onlist=`grep $filename $processed_files`
if [[ -z $onlist ]]
then
echo "processing, new: $filename"
#unzip file and import into mongodb
#write filename into processed list
echo $filename #>> $processed_files
fi
done
</code></pre>
<p>对于较小的示例(160k个文件),此过程运行约8分钟(无任何处理)</p>
<p>接下来我尝试了一个python脚本:</p>
^{pr2}$
<p>这只需不到2分钟。在</p>
<p><strong>有没有一个我可以忽略的更快的方法?</strong></p>
<p>其他解决方案:</p>
<ul>
<li>因为我使用s3sync下载新文件,所以将处理过的文件移动到不同的位置并不方便</li>
<li>由于文件名中有一个时间戳,我可能会考虑按顺序处理它们,并且只将名称与“上次处理”日期进行比较</li>
<li>或者,我可以跟踪最后一次运行处理的时间,并且只记录此后修改过的进程文件。在</li>
</ul>