如何将bash命令的输出连接到cat?

时间:2018-04-28 01:18:54

标签: bash

我正在尝试将"find"命令的输出连接到"cat"命令:

find -size 8c
返回./test.txt(这是我在此文件夹中大小为8字节的唯一文件)

cat ./test.txt
返回iamatesttest.txt的内容)

但是当我尝试连接两者时:
find -size 8c | cat
它返回./test.txt文件的名称,而不是它的内容。我一定错过了一些东西:我想把它的输出传递给cat。

我也尝试了cat <(find -size 8c),但它也返回了文件的名称而不是内容。

3 个答案:

答案 0 :(得分:5)

您可以使用-exec的{​​{1}}选项:

find

如果您想限制深度使用:

find . -size 8c -exec cat {} \;

答案 1 :(得分:0)

您的解决方案有什么问题?

您有./test.txt作为find -size 8c | cat的输出,因为不带参数的catcat /dev/stdin的别名。这意味着cat只打印它作为标准输入的任何内容。

解决问题的一种方法

您的问题的一种可能解决方案是使用xargs命令。它为您提供了将一个命令的标准输出作为另一个命令的命令行参数传递的选项。

由于这个定义非常普遍,让我在你的例子中解释一下。

find -size 8c | xargs cat

将输出:

iamatest

xargs在这做了什么?

它通过find -size 8c的标准输出./test.txt作为cat的命令行参数,使其与cat ./test.txt完全相同。

如果您有多个8字节文件

如果您有另一个文件test_2.txt12345678内容为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

(假设这是唯一的结果)