在子目录中捕获某些扩展名的文件

时间:2015-03-13 08:09:28

标签: bash loops cat

我有一个目录parallel/,其中包含包含以*.en扩展名结尾的文件的子目录。

这样做可以获得我需要的文件列表。

find parallel/ -name "*.en" -type f

现在我需要cat所有这些文件来获得一个组合文件,即

cat *.en > all.en

我尝试过以下但是没有用:

$ for i in (find parallel/ -name "*.en" -type f): do cat $i ; done
-bash: syntax error near unexpected token `('

$ for i in ((find parallel/ -name "*.en" -type f)): do cat $i ; done
-bash: syntax error near unexpected token `('

有没有办法让我遍历所有子目录并将所有子目录“cat”到一个文件中?

2 个答案:

答案 0 :(得分:1)

你很亲密;只是缺少美元符号。

使bash评估命令并获得输出;使用$()

for i in $(find parallel/ -name "*.en" -type f); do cat $i ; done

$()相当于,但比旧的背景更好,更安全

var=`cmd` #do not use!

答案 1 :(得分:1)

您可以使用cat选项在find内调用-exec

find parallel/ -name "*.en" -type f -exec cat {} +

要将其重定向到文件,请使用:

find parallel/ -name "*.en" -type f -exec cat {} + > all.en

根据man find

-exec utility [argument ...] {} +
       Same as -exec, except that ``{}'' is replaced with as many pathnames as possible 
       for each invocation of utility. This behaviour is similar to that of xargs(1).