2016-05-02 29 views
1

我需要連接一系列目錄中的大量文本文件。所有文本文件具有相同的名稱,但某些文件夾不包含該文件,只需要跳過。UNIX:cat大量文件 - 輸出翻倍

當我使用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 

,這導致文件被連接在一起的兩倍。舉例來說,我有一個名爲FILE.TXT,每一個不同的目錄中,每3個文本文件,以不同的一行文字:

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

這是我會怎麼做

find . -name File.txt -exec cat {} >> output.txt \; 

此搜索文件File.txt的所有事件和追加該文件的cat'ed輸出到文件output.txt

不過,我有嘗試了你的查找命令,它也起作用。

find . -name File.txt -exec cat {} \; > newFile.txt 

我建議你明確下來輸出文件newFile.txt您嘗試要麼你發現或找到我之前如下:

>newFile.txt 

這是清空文件內容的簡便方法。 (儘管這對你來說應該沒有關係,通過重定向文件來清空文件也是可以做到的,即使另一個進程正在寫入文件也是如此)

希望這有助於你。