在find --exec中传递多个命令

时间:2019-08-07 16:42:36

标签: shell find

在外壳中,我想列出与特定文件名模式匹配的每个文件的行数。我的方法是使用dir选择文件,使用find打印文件,然后使用-exec cat {}计算行数。

|wc -l

打印所有内容,但是

find . -type f -name 'priceupdate*csv' -print0 -exec cat {} \;

警报

find . -type f -name 'priceupdate*csv' -print0 -exec cat {}|wc -l \;

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用xargs

find . -type f -name 'priceupdate*csv' -print0 | xargs -0 wc -l

或者您可以这样做:

find . -type f -name 'priceupdate*csv' -exec wc -l {} +

答案 1 :(得分:1)

exec运行带有其参数的单个命令,而不是任意的shell命令。为此,您需要显式运行外壳程序。

find . -type f -name 'priceupdate*csv' -print0 -exec sh -c  'cat "$1" |wc -l' _ {} \;

通常,最好将{}的扩展名作为参数传递,而不是尝试将其直接合并到命令中,以免由于shell解析而引起意外。

(我将这个答案限于所询问的问题,而不是涉及实际的shell命令涉及的各种问题。)