我正在尝试将"find"
命令的输出连接到"cat"
命令:
find -size 8c
返回./test.txt
(这是我在此文件夹中大小为8字节的唯一文件)
cat ./test.txt
返回iamatest
(test.txt
的内容)
但是当我尝试连接两者时:
find -size 8c | cat
它返回./test.txt
文件的名称,而不是它的内容。我一定错过了一些东西:我想把它的输出传递给cat。
我也尝试了cat <(find -size 8c)
,但它也返回了文件的名称而不是内容。
答案 0 :(得分:5)
您可以使用-exec
的{{1}}选项:
find
如果您想限制深度使用:
find . -size 8c -exec cat {} \;
答案 1 :(得分:0)
您有./test.txt
作为find -size 8c | cat
的输出,因为不带参数的cat
是cat /dev/stdin
的别名。这意味着cat
只打印它作为标准输入的任何内容。
您的问题的一种可能解决方案是使用xargs
命令。它为您提供了将一个命令的标准输出作为另一个命令的命令行参数传递的选项。
由于这个定义非常普遍,让我在你的例子中解释一下。
find -size 8c | xargs cat
将输出:
iamatest
xargs
在这做了什么?
它通过find -size 8c
的标准输出./test.txt
作为cat
的命令行参数,使其与cat ./test.txt
完全相同。
如果您有另一个文件test_2.txt
,12345678
内容为find -size 8c
,则会为您提供:
./test.txt
./test_2.txt
致电find -size 8c | xargs cat
会给您:
iamatest12345678
与运行cat ./test.txt ./test_2.txt
答案 2 :(得分:-2)
您可以在cat
命令的输出上拨打find
:
cat $(find -size 8c)
这变成了
cat test.txt
(假设这是唯一的结果)