【问题标题】:How to do recursively grep when there is a FIFO in the path当路径中有FIFO时如何递归grep
【发布时间】:2012-05-16 09:35:20
【问题描述】:

我想做一个递归 grep。所以通常我会做以下事情:

grep pattern -r /some/path

通常这会起作用。但是,当路径中存在 FIFO 文件时,grep 会卡在那里。

johnson@ISD32_54_sles10:~/tmp$ ls -l 1
prw-r--r-- 1 neoli users 0 2012-05-16 17:24 1

然后我调用strace命令找出问题,我搞定了。

...
stat64("./1", {st_mode=S_IFIFO|0644, st_size=0, ...}) = 0
open("./1", O_RDONLY|O_LARGEFILE) = 3
read(3,  <unfinished ...>

所以我的问题是当路径中有 FIFO 时如何递归 grep? grep 是否有一个命令行选项会告诉 grep 在指定时忽略 FIFO?

感谢您的热心帮助。

【问题讨论】:

    标签: shell grep fifo


    【解决方案1】:

    来自man grep (GNU)

    -D ACTION, --devices=ACTION
    
       If  an  input  file is a device, FIFO or socket, use ACTION to process it.
       By default, ACTION is read, which means that devices are read just as if
       they were ordinary files.  If ACTION is skip,  devices  are  silently skipped.
    

    【讨论】:

      【解决方案2】:

      一种方法是使用find

      find . -type f -exec grep pattern {} \;
      

      这只会 grep 用于常规文件上的模式(因此没有符号链接、管道等)

      【讨论】:

      • 它在 FreeBSD 上很有用,其中包括即使提供了 -D skip 也无法跳过 FIFO 的旧 GNU grep。
      猜你喜欢
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多