当前流程:
tar.gz
文件.(实际上,我有大约2000个,但这是另一个故事). tar.gz
文件,显示100,000个小文件(每个大约600个字节).我正在使用的机器上的临时空间几乎不能同时处理其中一个进程,更不用说它们默认发送的16(超线程双四核).我正在寻找一种方法来执行此过程而不保存到磁盘.我认为单独使用文件的性能损失tar -xf $file -O <targetname>
将是令人望而却步的,但它可能是我所坚持的.
有没有办法做到这一点?
编辑:由于两个人已经犯了这个错误,我将澄清:
EDIT2:实际代码:
for f in posns/*; do
~/data_analysis/intermediate_scattering_function < "$f"
done | ~/data_analysis/complex_autocorrelation.awk limit=1000 > inter_autocorr.txt
Run Code Online (Sandbox Code Playgroud)
如果你不关心文件之间的界限,那么tar --to-stdout -xf $file
你会做你想做的事情; 它会将存档中每个文件的内容一个接一个地发送到stdout.
这假设您正在使用GNU tar,如果您使用bash,这很有可能.
[更新]
鉴于您确实希望单独处理每个文件的约束,我同意Charles Duffy认为shell脚本是错误的工具.
您可以尝试他的Python建议,或者您可以尝试Archive :: Tar Perl模块.这些中的任何一个都允许您遍历内存中tar文件的内容.
这听起来像是一个适合这项工作的工具可能不是 shell 脚本的情况。Python 有一个tarfile
可以在流模式下运行的模块,让您只需一次遍历大型存档并处理其文件,同时仍然能够区分各个文件(该方法tar --to-stdout
无法区分单个文件)。