したがって、何千ものサブディレクトリを持つファイルシステムがあります。
304880.US
906T89.DE
032848.UK
023455.UKREGRESS
:
フォルダ内に1
、という名前の別の2
フォルダがある場合もあります3
。
各最終ディレクトリにはさまざまなテキストファイルが含まれていますoutput.txt
。
.UK
名前のすべてのディレクトリを見つけて、output.txt
すべてのファイルを1つのマスターファイルにマージしたいと思います。順序は重要ではありません。
例:
├── 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'
グローバル例の場合:
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' \)
生成されたファイルは独自の親ディレクトリに個別に配置されます。