将查找结果传递给自定义脚本

时间:2014-03-30 14:31:36

标签: ubuntu grep find xargs

我需要将返回find函数的每个文件名传递给我的脚本 考虑一下简单的例子:

find ./ -iname "*.java"  | xargs ./fnfs2lc.sh

和fnfs2lc.sh包含简单的代码:

#!/bin/bash
echo $1 
exit

因此,我希望获得文件列表,但它只显示目录树中的第一个文件。

如果我执行:

find ./ -iname "*.java"

结果是:

./src/test/java/com/win/slots/picktables/SequnetialPickTableTest.java
./src/test/java/com/win/slots/picktables/WeightPickTableTest.java
./src/test/java/com/win/slots/picktables/AccuratePickTableTest.java
./src/test/java/com/win/slots/picktables/RangePickTableTest.java
./src/test/java/com/win/slots/picktables/KeyPickTableTest.java
./src/test/java/com/win/slots/api/WinningAmountTest.java
./src/test/java/com/win/slots/api/BIEventSenderTest.java
./src/test/java/com/win/slots/api/ParserTester.java
./src/test/java/com/win/slots/api/WindowTest.java

如果我运行第一个命令,我得到:

./src/test/java/com/win/slots/picktables/SequnetialPickTableTest.java

你知道为什么它会在第一个文件后停止处理吗?

1 个答案:

答案 0 :(得分:1)

您的脚本正在使用$1,因此这是列表中的第一个结果。如果要打印所有结果,可以使用:

#!/bin/bash
printf "%s\n" "$@"

此外,您不需要xargs,您可以使用

find . -iname "*.java" -exec ./fnfs2lc.sh {} +

如果使用效率较低的

find . -iname "*.java" -exec ./fnfs2lc.sh {} \;

然后你可以使用

echo "$1"

但请注意$1

周围的引号
相关问题