在数百个目录中连接数千个文本文件(同时保留一些结构)

时间:2011-11-15 22:23:11

标签: bash shell command-line

我有一组分布在400多个目录中的纯文本文件,有大量的子目录。大约有300,000个文本文件。例如:

directory1/subdirectory1
directory1/subdirectory2
directory1/subdirectory1/subdirectory3

directory1中的所有文本文件都应该放在一个名为directory1.txt的大型文本文件中。然后使用directory2重复。

进入这四百个目录中的每一个并以这种方式组合所有文本文件的最快最简单的方法是什么?

我知道我可以访问四百个目录中的每一个并使用find之类的命令将所有文本文件放在一个目录中,然后使用cat *.txt >> all.txt,但肯定必须是一个自动化这个过程的简单方法吗?

3 个答案:

答案 0 :(得分:4)

连接子树中的所有txt文件:

#!/bin/sh
# Usage: cat-txt dirname
find "$1" -name \*.txt -print0 | xargs -0 cat >> "$1.txt"

在所有直接子目录上调用cat-txt

$ find -mindepth 1 -maxdepth 1 -type d -exec cat-txt '{}' \;

答案 1 :(得分:1)

  

必须有一种简单的方法来自动化这个过程吗?

你为什么要找一个?这是一次性活动还是你不时会重复它?

我只想说一些简单的事情:

for ff in `find . -maxdepth 1 -type d`
do
    find "$ff" -type *.txt -exec cat {} \; >> "$ff.txt"
done

答案 2 :(得分:1)

我在我的系统上测试了这个,它完美无瑕。你可能想把它调整到你的参数,但在一行中我做了你需要的一切。

for I in `ls -dR */`; do cat $I/* > $I.txt; done

您可以将ls命令更改为仅搜索文本文件,否则您也将获得二进制数据。享受。

for I in `ls -dR */*.txt`; do cat $I/* > $I.txt; done