2017-10-13 104 views
0

我试图合并大量总大小为75Gb的文件。如果我使用,例如如何在不创建新文件的情况下合并大量文件

~$ cat * > out.merge

的两个文件达150GB的大小和我的HD有没有这样的空间。那么如何避免重复数据呢?

在此先感谢...

+0

猫一次两个文件,之后删除它们? – 123

+0

不可能一次完成这一切吗?大概'猫'批次将会非常缓慢.. – Nacho

+2

如果没有临时重复,您不会*想要*做到这一点,因为如果出现中途出错的情况,您可能会丢失数据。 – chepner

回答

0

你可以使用一个循环为:在移动到下一个前

for n in * 
do 
    cat "$n" >>out.merge && rm "$n" 
done 

在这种情况下,循环擦除使用的文件。你甚至可以在第一个文件重命名为out.merge然后追加他们的休息,以保存第一个空间......

+0

如果'cat'成功,我会倾向于只删除文件 - 即在'cat'和'rm'之间放置'&&'。 –

+0

另外,如果文件名包含空格或者可以评估为球体,则这将会行为不当。它真的应该是'猫'$ n“'和'rm”$ n“'。显式跳过'out.merge'作为输入文件可能也是明智的; GNU'cat'检查它的输入和输出是否在同一地方,但并不是所有的实现都是健壮的。 –

+0

感谢您的所有建议。为清楚起见,我没有明确检查“out.merge”的存在。我假设'out.merge'不存在开始。 –

0

你可以尝试cat荷兰国际集团的每个文件和类似

for f in ./*; do cat "$f" && rm "$f"; done > another_dir/out.merge 

立即删除它尽管这仍然会为每个文件产生一个新的cat

+1

你不需要大括号; for循环本身可以有输出重定向。 – chepner

+2

这种方法唯一的问题是,如果你在半途中开始出错,你可能会删除一个文件而不确认它已被成功写入'out.merge'。 – chepner

+2

'cat“$ f”&& rm“$ f”' – 123

相关问题