UNIX:cat大量文件 - 输出加倍

时间:2016-05-02 19:02:55

标签: unix

我需要连接一系列目录中的大量文本文件。所有文本文件都具有相同的名称,但有些文件夹不包含该文件,只需要跳过。

当我使用cat ./**/File.txt > newFile.txt时,我收到以下错误/bin/cat: Argument list too long

我尝试了几种不同的方式使用ulimit命令但是没有用。

我试过了:

find . -name File.txt -exec cat {} \; > newFile.txt
find . -name File.txt -exec cat {} \+ > newFile.txt
find . -type f -name File.txt | xargs cat

这会导致文件连接两次。例如,我有3个名为File.txt的文本文件,每个文件位于不同的目录中,每个文件都有不同的文本行:

  

TEST1

     

TEST2

     

TEST3

当我执行上述命令时,我的newFile.txt看起来像:

  

TEST1

     

TEST2

     

TEST3

     

TEST1

     

TEST2

     

TEST3

我无法弄清楚为什么会发生这种情况两次。当我在我的小测试集上使用命令cat ./**/File.txt > newFile.txt时,它工作正常,我最终得到一个文件:

  

TEST1

     

TEST2

     

TEST3

我也试过

for a in File.txt ; do cat $a >> newFile.txt ; done

但收到消息

cat: File.txt: No such file or directory

因为某些目录不包含此文本文件,我的猜测是。

还有其他方法可以做到这一点,还是有理由将我的文件连接两次?

1 个答案:

答案 0 :(得分:1)

以下是我将如何做到这一点

element.send_keys(:control, 'A')

这将搜索文件find . -name File.txt -exec cat {} >> output.txt \; 的所有匹配项,将该文件的cateded输出附加到文件File.txt

但是,我已经尝试过你的find命令,它也有效。

output.txt

我建议您在尝试查找或我的查找之前清除输出文件find . -name File.txt -exec cat {} \; > newFile.txt ,如下所示:

newFile.txt

这是清空文件内容的便捷方法。 (虽然这对你来说无关紧要,即使另一个进程正在写入文件,也可以通过重定向任何内容来清空文件)

希望这有帮助。