繁体   English   中英

使用带有find命令的管道

[英]using pipes with a find command

我有一系列带分隔符的文件,其中一些文件包含错误的数据,可以通过对它们进行列计数来识别它们。 我可以使用以下命令找到它们:

find ./ -name 201201*gz -mtime 12

它们都被压缩了,我不想全部取消归档。 因此,要检查我一直在做的列数,我将其作为每个文件的第二条命令运行:

zcat ./path/to/file.data | awk '{print NF}' | head

我知道我可以使用-exec通过find在每个文件上运行命令,但是又如何通过管道运行它呢? 我尝试了几件事,但我均未预期能起作用,但均未起作用:

find ./ -name 201201*gz -mtime 12 -print -exec zcat {} \; | awk '{print NF}'| head
find ./ -name 201201*gz -mtime 12 -print -exec "zcat {} | awk '{print NF}'| head" \;

我会使用显式循环方法:

find . -name 201201*gz -mtime 12 | while read file; do
    echo "$file: "
    zcat "$file" | awk '{print NF}' | head
done

您或多或少通过以下方式传递内容:

find . -name "foo" -print0 | xargs -0 echo

因此,您的命令如下所示:

find ./ -name "201201*gz" -mtime 12 -print0 | xargs -0 zcat | awk '{print NF}'| head

-print0xargs -0仅有助于确保带有特殊字符的文件不会中断管道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM