【发布时间】:2013-04-05 06:55:15
【问题描述】:
我经常想写这样的命令(在zsh,如果相关的话):
find <somebasedirectory> | \
grep stringinfilenamesIwant | \
grep -v stringinfilesnamesIdont | \
xargs dosomecommand
(或更复杂的 grep 组合)
近年来find 增加了-print0 开关,xargs 增加了-0,它允许通过空终止文件名以优雅的方式处理名称中包含空格的文件,允许这样做:
find <somebasedirectory> -print0 | xargs -0 dosomecommand
但是,grep(至少我拥有的版本,Ubuntu 上的 GNU grep 2.10)似乎没有等效于使用 和 生成以空字符结尾的行;它有 --null,但这似乎只与使用 grep 直接在文件中搜索时使用 -l 输出名称有关。
是否有可以与 grep 一起使用的等效选项或选项组合?或者,是否有一种简单而优雅的方式来简单地使用 find 的-regex 或 Perl 来表达我的命令管道?
【问题讨论】:
-
-print0选项通常只需要处理包含换行符而不是其他空格的文件名,因为传统的换行符分隔符(与-print一起使用)对它们很好。