如何使用 linux find 命令打印内容而不是文件名?

Rez*_*uan 10 linux find cat

我有成千上万个类似这样命名的 unl 文件cbs_cdr_vou_20180624_603_126_239457.unl。我想使用以下命令打印这些文件中的所有行。但它只给我文件名。我不需要文件名,我只需要这些文件中的内容。

find -type f -name 'cbs_cdr_vou_20180615*.unl'  > /home/fifa/cbs/test.txt
Run Code Online (Sandbox Code Playgroud)

电流输出:

./cbs_cdr_vou_20180615_603_129_152023.unl
./cbs_cdr_vou_20180615_603_128_219001.unl
./cbs_cdr_vou_20180615_602_113_215712.unl
./cbs_cdr_vou_20180615_602_120_160466.unl
./cbs_cdr_vou_20180615_603_125_174428.unl
./cbs_cdr_vou_20180615_601_101_152369.unl
./cbs_cdr_vou_20180615_603_133_193306.unl
Run Code Online (Sandbox Code Playgroud)

预期输出:

8801865252020|200200|20180613100325|;
8801837463298|200200|20180613111209|;
8801845136955|200200|20180613133708|;
8801845205889|200200|20180613141140|;
8801837612072|200200|20180613141525|;
8801877103875|200200|20180613183008|;
8801877167964|200200|20180613191607|;
8801845437651|200200|20180613200415|;
8801845437651|200200|20180613221625|;
8801839460670|200200|20180613235936|;
Run Code Online (Sandbox Code Playgroud)

请注意,对于 cat 命令,我收到错误-bash: /bin/logger: Argument list too long,这就是为什么要使用find而不是cat命令的原因。

Kus*_*nda 28

find实用程序处理路径名。如果find在找到的路径名的命令中没有提及特定操作,则默认操作是输出它们。

您可以cat通过添加-execfind命令对找到的路径名执行操作,例如 running :

find . -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} + >/home/fifa/cbs/test.txt
Run Code Online (Sandbox Code Playgroud)

这将查找当前目录中或当前目录下的所有常规文件,其名称与给定的模式匹配。对于尽可能大的批量,cat将调用以连接文件的内容。

输出将转到/home/fifa/cbs/test.txt.

有关的:


Yar*_*ron 12

的输出find将产生相关的文件名。
您可以通过管道 ( |)xargs catcat在每个文件上执行命令的输出发送到该输出。

例如:

find -type f -name 'cbs_cdr_vou_20180615*.unl' | xargs cat  > /home/fifa/cbs/test.txt
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 -exec cat

find -type f -name 'cbs_cdr_vou_20180615*.unl'  -exec cat {} \;  > /home/fifa/cbs/test.txt
Run Code Online (Sandbox Code Playgroud)

  • 你的两个命令都工作正常。但比**Kusalananda 的** 命令慢一点。我猜,`-exec cat {} \;` 和 `-exec -cat {} +` 的执行时间会有所不同。顺便说一下,非常感谢 Yaron。 (4认同)
  • `找到-print0 | xargs -0` 不易受到空格/引号/等的影响。 (2认同)