递归列出目录中的文件及其包含的内容

递归列出目录中的文件及其包含的内容

我正在尝试查找目录中文件中存储的所有值。

我可以cat /some/dir/*,但这只会让我得到类似的东西

1
2
3
4

我想要的是类似的东西

/some/dir/file1: 1
/some/dir/file2: 2

我有什么办法可以做到这一点吗?

答案1

与 GNU grep(恰好是 CEntOS 上的实现)或兼容:

grep -r '^' /some/dir

正则表达式^在每行的开头匹配,因此匹配每一行。grep将文件名添加到每个匹配行的前面。您还可以添加-n包含行号的选项。

POSIXly:

find /some/dir -type f -exec grep '^' /dev/null {} +

我们添加内容/dev/null以确保grep即使文件列表只有一个元素也能打印文件名。

答案2

如果所有文件只包含一行:

find /some/dir -type f -exec awk '{print FILENAME ": " $0}' {} +

否则,打印一行,并将文件名作为标题:

find /some/dir -type f -exec awk 'FNR<2{print FILENAME ":"}1' {} +

相关内容