我有多个包含代码的文件,想将它们合并以便打印出来。它们分散在多个目录中。
例如,我有如下目录:
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