我有数千个 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
而不是cat
命令。
答案1
该find
实用程序处理路径名。如果命令中没有提及find
针对找到的路径名的特定操作,则默认操作是输出它们。
cat
您可以通过添加-exec
以下命令对找到的路径名执行操作,例如运行find
:
find . -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} + >/home/fifa/cbs/test.txt
这将找到当前目录中或当前目录下名称与给定模式匹配的所有常规文件。对于尽可能大的批次,cat
将调用以连接文件的内容。
输出将转到/home/fifa/cbs/test.txt
.
有关的:
答案2
的输出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