如何使用Unix命令在屏幕上显示目录下所有文件的内容

44

使用以下命令我们可以在屏幕上显示多个文件的内容:

cat file1 file2 file3

但是如果一个目录中有超过20个文件,我想要将所有这些文件的内容显示在屏幕上,而不使用像上面那样逐个列出文件名的方式。

我应该如何做呢?

7个回答

52
您可以使用*字符来匹配当前目录中的所有文件。
cat *将显示所有文件的内容。
如果您想仅显示扩展名为 .txt 的文件,则可以使用cat *.txt,或者如果您想显示所有以 "file" 开头的文件名,例如您的示例,您可以使用cat file*

1
它可以工作于当前目录,但如果我想显示当前目录下子目录中文件的内容,该怎么办? - bvb
5
如果只有一个子目录层级,请使用 cat * */* - rojomoke
2
否则执行 find . -type f -exec cat {} \;。请注意,不要有任何非字符文件,因为如果你使用cat命令读取它们,可能会破坏你的显示。 - rojomoke
1
@bvb 这不是你的问题,但是如果你想进入一个子目录,你可以执行 cat * */* - Munim

27
如果只有一个子目录层级,使用cat * */*。如果有多个层级,则……
find . -type f -exec cat {} \;

这意味着运行find命令,在当前目录(.)中搜索所有普通文件(-type f)。对于找到的每个文件,使用当前文件名作为参数({}是文件名的占位符)运行应用程序(-exec) cat。转义分号是必需的,以终止-exec子句。


1
在 cat * / 命令中,为什么要给出 * / 以及它如何被解释为一个子目录的一级? - bvb
* 代表当前目录下的所有文件。 */*(无空格)代表当前目录及其子目录下的所有文件。 */*/* 则匹配目录中的目录中的所有文件,以此类推。如果你要使用 Unix,这些都是非常基础的知识。 - rojomoke

22

我发现在打印每个文件的内容之前打印文件名也很有用:

find ./ -type f | xargs tail -n +1

它将遍历所有子目录。


4
如果您想要执行不止一个命令来处理每个文件,使用for循环会更加灵活。例如,如果您想要打印文件名和其内容:
for file in parent_dir/*.file_extension; do echo $file; cat $file; echo; done

2
你试过这个命令吗?
grep . *

如果您要查看/sys或/proc文件,这种方法是可行的,但对于大文件来说不太适用。


1
你可以使用 awk。假设我们需要打印目录 some-directory 中所有文本文件的内容。
awk '{print}' some-directory/*.txt

0
尝试这个会起作用 cat Folder/*.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接