如何将多个目录中的多个文件及其名称连接起来?

如何将多个目录中的多个文件及其名称连接起来?

我有多个包含代码的文件,想将它们合并以便打印出来。它们分散在多个目录中。

例如,我有如下目录:

    root
   /   \
 dir1  dir2
 / \   /  \
s1 s2 s3  s4

每个文件都包含要连接成一个文本文件的文件。

最终输出如下:

Filename(its directory name)
content

Filname 2 (its directory name)
content 2

.
.
.

Filename n (its directory name)
content n

有人可以帮我使用命令行实现这个吗?

答案1

假设“按顺序”意味着按照您所在地区的排序顺序,那么您可以使用简单的 shell globs。

例如给定

$ tree root
root
├── dir1
│   ├── s1
│   └── s2
└── dir2
    ├── s3
    └── s4

2 directories, 4 files

然后

$ for f in root/*/*; do { printf '%s (%s)\n' "${f##*/}" "${f%/*}"; cat "$f"; printf '\n'; }; done
s1 (root/dir1)
Contents of file 1

s2 (root/dir1)
Contents of file 2

s3 (root/dir2)
Contents of file 3

s4 (root/dir2)
Contents of file 4

如果您只是需要一些快速而粗糙的东西而不需要特定的格式,那么您可以使用head比任何文件的已知行数更大的行数:

$ head -n 100000 root/*/*
==> root/dir1/s1 <==
Contents of file 1

==> root/dir1/s2 <==
Contents of file 2

==> root/dir2/s3 <==
Contents of file 3

==> root/dir2/s4 <==
Contents of file 4

相关内容