我有一个目录,其中包含 3 个命名管道以及其他文件:FIFO、FIFO1 和 FIFO11。如果我尝试类似
grep mypattern *
在这个目录中,grep 永远挂在命名管道上,所以我需要排除它们。不料,
grep --exclude='FIF*' mypattern *
不能解决问题;grep 仍然永远挂起。然而,
grep -r --exclude='FIF*' mypattern .
确实解决了挂起问题(尽管搜索所有子目录的不良副作用)。
我做了一些测试,表明grep --exclude ='FIF*' mypattern *
如果 FIFO 等是常规文件,而不是命名管道,则可以按预期工作。
问题:
- 如果它们是常规文件,为什么在这两种情况下都
grep
跳过,并在递归情况下跳过命名管道,但在非递归情况下不跳过命名管道?--excludes
--excluded
- 是否有另一种方式来格式化排除在所有情况下都会跳过这些文件?
- 有没有更好的方法来完成我所追求的?(编辑:我刚刚
--devices=skip
在 grep 中发现了这个标志,所以这就是这部分的答案......但我仍然对问题的前两部分感到好奇)