如何显示名称中包含字母“a”的文件的内容?我试过
cat|ls|grep 'a'
答案1
这应该有效:
find . -type f -name '*a*' -exec cat {} \;
答案2
分页less
器具有允许浏览多个文件并在它们之间跳转的功能,因此,如果所有文件都在同一目录中,less *a*
将首先打开第一个文件,并且您可以随时通过键入前进到下一个文件:n
或返回到上一个文件打字:p
。=
随时键入都会显示当前文件的名称。该less
寻呼机还有许多其他有用的记录但不常用的功能。在程序中,输入h
一个长的多页备忘单。
find -type f -maxdepth 1 -name '*a*' -exec less '{}' +
答案3
如果所有文件都位于同一目录中,这个简短版本将执行此操作:
cat *a*
的情况下有趣的以“-”和“./”开头的文件名应该是前缀:
cat ./*a*
目录a
将产生无害的错误消息。
答案4
输出全部内容常规的当前目录中名称包含a
以下字符的文件:
find . ! -name . -prune -name '*a*' -type f -exec cat {} +
尽管有多种find
实现(包括 Ubuntu 上的 GNU 实现),但这会排除名称包含在当前语言环境中不形成有效字符的字节序列的文件。
对于某些find
实现,您可以使用-depth 1
而不是标准! -name . -prune
.其他一些(如 GNU find
)有-mindepth 1 -maxdepth 1
(尽管-maxdepth 1
这里已经足够了,因为深度 0 被和.
排除)。-type f
-name '*a*'
无效字符问题可以通过使用zsh
and 来缓解:
cat ./*a*(D.)
如果没有匹配的文件,这还有一个好处是报告错误并对文件列表进行排序,从而减少输出的随机性。
如果您还想包含常规文件的符号链接,请在 zsh glob 限定符中添加一个选项-L
。find
-
如果要排除隐藏文件,请在 zsh 的 glob 限定符中! -name '.*'
添加find
或删除。D
请注意,cat
连接这些文件。如果a1
containsfoo
没有尾随换行符(如果a1
是正确的文本文件,则不应发生这种情况)并且a2
contains bar
,则输出将为foobar
.
要包含文件名,您可以使用在每行前面添加文件名的方式grep '^' /dev/null
代替它。cat
或者grep -n '^' /dev/null
还包括行号。
通过 GNU 实现head
(如您的 Ubuntu 上所示),您可以使用head -vc-0
它将添加一个
===> ./file_with_a <===
文件头和每个文件之间的空行。