Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UNIX:cat大量文件-输出加倍_Unix - Fatal编程技术网

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

UNIX:cat大量文件-输出加倍,unix,Unix,我需要连接一系列目录中的大量文本文件。所有文本文件都具有相同的名称,但某些文件夹不包含该文件,只需跳过即可 使用cat./**/File.txt>newFile.txt时,出现以下错误/bin/cat:参数列表太长 我尝试了几种不同的方式使用ulimit命令,但都不起作用 我试过: find . -name File.txt -exec cat {} \; > newFile.txt find . -name File.txt -exec cat {} \+ > newFile.tx

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

使用
cat./**/File.txt>newFile.txt
时,出现以下错误
/bin/cat:参数列表太长

我尝试了几种不同的方式使用
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的文本文件,每个文件位于不同的目录中,每个文件都有不同的文本行:

测试1

测试2

测试3

执行上述命令时,我的newFile.txt如下所示:

测试1

测试2

测试3

测试1

测试2

测试3

我不明白为什么这会发生两次。当我在我的小测试集上使用命令
cat./**/File.txt>newFile.txt
时,它工作正常,最后我得到一个文件,其中包含:

测试1

测试2

测试3

我也试过了

for a in File.txt ; do cat $a >> newFile.txt ; done
但你要明白这一点

cat: File.txt: No such file or directory
因为有些目录不包含这个文本文件,这是我的猜测


是否有其他方法可以做到这一点,或者是我的文件被连接两次的原因吗?

以下是我的方法

find . -name File.txt -exec cat {} >> output.txt \;
这将搜索所有出现的文件
file.txt
,并将该文件的分类输出附加到文件
output.txt

但是,我已经尝试了find命令,它也可以工作

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

 >newFile.txt 
这是一种清空文件内容的简便方法。(虽然这对您现在来说无关紧要,但即使其他进程正在向文件写入内容,也可以通过不重定向任何内容来清空文件)

希望这有帮助