在bash中连接来自不同文件夹的文件

时间:2018-05-14 09:56:00

标签: bash unix concatenation

我有一个包含227个子目录的目录,每个目录都包含一个我要连接的同名文件(in.BV)。

即。

Directory
---------Subdirectory1
---------------in.BV various other files
---------Subdirectory2
---------------in.BV various other files

这些名为in.BV的文件只包含文本,我想简单地将它们连接成一个长文本文件。

我是新手,这是我到目前为止所尝试过的:

for d in */
do
        (cd $d cat *in.BV >> Newin.txt)
done

这给了我一个空白Newin.txt。这超出了我目前对bash脚本的理解。

提前致谢!

里奇

2 个答案:

答案 0 :(得分:2)

假设您在Directory目录中:

cat */in.BV >Newin.txt

假设你高于Directory

shopt -s globstar
cat **/in.BV >Newin.txt
shopt -u globstar

这会在globstar中设置bash shell选项。设置选项后,您可以使用**匹配任何路径名(*仅匹配路径名中的下一个/,但**匹配/ })。

在当前目录中创建cat的{​​{1}}之后,我取消设置Newin.txt选项。

如果您有很多文件,并且由于命令行变得太长而导致shell执行globstar时出现问题,请参阅varlogtim's answer

下面的评论中给出了新信息(文件将根据子目录名称按顺序连接):

假设你在cat

Directory

答案 1 :(得分:2)

示例:

 SELECT *
 FROM user_logins
 WHERE user_agent NOT LIKE '%iPhone%'
 AND user_agent NOT LIKE '%Linux; Android%'
 order BY id DESC
 LIMIT 1000

使用Exec查找:

root@dib:~# find ./ -type f -name in.BV
./test1/in.BV
./test1/test2/in.BV