连接

连接

所以我有一个包含数千个子目录的文件系统

304880.US
906T89.DE
032848.UK
023455.UKREGRESS
:

有时文件夹内还有其他名为12和的文件夹3

每个最终目录都包含各种文本文件,其中output.txt.

.UK我想找到名称中任意位置的所有目录,并将其所有output.txt文件合并到一个主文件中。顺序并不重要。

例子:

├── 032848.UK
│   ├── corrupted.txt
│   ├── errors.txt
│   ├── notfound.txt
│   ├── output.txt
│   └── rejected.txt
├── 135411.UK
│   ├── 1
│   │   ├── corrupted.txt
│   │   ├── errors.txt
│   │   ├── notfound.txt
│   │   ├── output.txt
│   │   └── rejected.txt
│   ├── 2
│   │   ├── corrupted.txt
│   │   ├── errors.txt
│   │   ├── notfound.txt
│   │   ├── output.txt
│   │   └── rejected.txt
│   └── 3
│       ├── corrupted.txt
│       ├── errors.txt
│       ├── notfound.txt
│       ├── output.txt
│       └── rejected.txt
├── 304880.US
│   ├── corrupted.txt
│   ├── errors.txt
│   ├── notfound.txt
│   ├── output.txt
│   └── rejected.txt
├── 906T89.DE
│   ├── corrupted.txt
:   :
└── ...

答案1

(f 假设合并是串联的。)

连接

你可以做这样的事情(寻找):

find . -wholename '*.UK*/*output.txt' -exec cat {} >>concatenated.UK.txt +

或通过全球定位:

cat *.UK*/*{output.txt,/output.txt} >concatenated.UK.txt

或者更具体地说:

cat *.UK*/{output.txt,[123]/output.txt} >concatenated.UK.txt

列表

至于find,你可以通过以下方式查看它找到了什么:

find . -wholename '*.UK*/*output.txt'

对于 glob 例如:

printf '%s\n' *.UK*/{output.txt,[123]/output.txt}

答案2

我从条件出发——合并意味着串联。生成的文件应放置在目录中*.UK/

find -path '*.UK/[123]/output.txt' -exec bash -c 'cat $0 >>${0%/*}/../output.txt' {} \;

您可以添加这样的路径: \( -path '*.UK/[123]/output.txt' -o -path '*.UKREGRESS/[123]/output.txt' \)
但生成的文件将分别放置在其自己的父目录中。

相关内容