我有一个目录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”到一个文件中?
答案 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).