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


10

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

find -type f -name 'cbs_cdr_vou_20180615*.unl'  > /home/fifa/cbs/test.txt

电流输出:

./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

预期产量:

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|;

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


您仍然需要使用cat
伊格纳西奥·巴斯克斯

是! 您能告诉我该怎么做吗?@ IgnacioVazquez-Abrams
Rezuan

Answers:


28

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

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

find . -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} + >/home/fifa/cbs/test.txt

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

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

有关:


1
按预期工作,执行时间非常快,这确实很棒。非常感谢。
Rezuan

12

的输出find结果将带有相关的文件名。
您可以通过管道(|)在每个文件上xargs cat执行cat命令的输出。

例如:

find -type f -name 'cbs_cdr_vou_20180615*.unl' | xargs cat  > /home/fifa/cbs/test.txt

另一个选择是使用 -exec cat

find -type f -name 'cbs_cdr_vou_20180615*.unl'  -exec cat {} \;  > /home/fifa/cbs/test.txt

4
您的两个命令都工作正常。但是比Kusalananda的命令要慢一些。我猜,执行时间取决于-exec cat {} \;-exec -cat {} +。顺便说一句,非常感谢Yaron。
Rezuan

xargs容易受到找到的路径名中空格的影响;-exec cat {}不是
jez

2
find -print0 | xargs -0不易受空格/引号/等的影响。
蓬松的

1
@Rezuan:-exec cat {} \;为每个文件分别运行cat,而不是像xargs一样将它们批处理在一起。除非您明确希望使用它(例如,一次仅适用于一个文件的命令),或者需要在不-exec ... +-print0/ 不带/的情况下移植到系统,否则不要使用它xargs -0。不过,我有点惊讶,find|xargs它的速度明显慢于-exec cat {} +。您的文件总数很少吗,因此启动开销很大吗?还是只xargs在磁盘缓存很冷时才给版本计时?
彼得·科德斯

1
@PeterCordes感谢您的解释。我后来意识到这是用于磁盘缓存的。
Rezuan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.