0

我有一个文件名列表作为某些命令的输出。我需要在给定目录中找到这些文件中的每一个。

我尝试了以下命令:

ls -R /home/ABC/testDir/ | grep "\.java" | xargs find /home/ABC/someAnotherDir -iname

但它给了我以下错误:

find: paths must precede expression: XYZ.java

什么是正确的方法?

4

2 回答 2

3
ls -R /home/ABC/testDir/ | grep -F .java | 
    while read f; do find . -iname "$(basename $f)"; done

您也可以使用${f##*/}代替 basename。或者;

find /home/ABC/testDir -iname '*.java*' | 
 while read f; do find . -iname "${f##*/}"; done

请注意,毫无疑问,许多人会反对在ls不使用空字节作为文件名分隔符的情况下解析或查找的输出,声称文件名中的空格会导致问题。这些人通常会忽略文件名中的换行符,他们的反对意见可以被安全地忽略。(只要您的文件名中不允许有空格,就是这样!)

更好的选择是:

find /home/ABC/testDir -iname '*.java' -exec find . -iname {}

xargs 不起作用的原因是您不能在 find 中将 2 个参数传递给 -iname。

于 2013-02-20T03:12:35.803 回答
0

查找 /home/ABC/testDir -name "\.java"

于 2013-02-20T03:12:31.963 回答