1

此处的文档避免创建中间的一次性使用文件。我希望在获取 20 个可能文件的完整路径时利用它(不使用find -o语法)。我希望以下工作:

find | grep -f <<EOF
Controller.java
Main.java
Config.java
EOF

但我得到:

grep: option requires an argument -- f

我误解了这里的文件是如何工作的吗?或者 grep -f 不能很好地处理文件描述符?

我也对find可以获取-name值列表的解决方案持开放态度,但我不想输入-o20 次。


最佳选择:

cat <<EOF |  xargs --delimiter '\n' --max-args=1 -I% find -iname "*%*"
Controller.java
Main.java
Config.java
EOF

这在智力上是不令人满意的,因为对于每个搜索模式,您都find在整个文件层次结构上运行一次,这对于大型目录层次结构来说不能很好地扩展。

4

1 回答 1

1

如果您使用的是 /proc 系统(例如 linux),请尝试:

#!/bin/sh

find . | grep -f /proc/self/fd/3 3<< EOF
Controller.java
Main.java
Config.java
EOF

或者,如果您的 shell 支持进程替换(Bourne Shell 不支持):

#!/bin/bash

find . | grep -f <( cat << EOF
Controller.java
Main.java
Config.java
EOF
)
于 2017-09-06T22:10:16.367 回答