Linux:将命令的输出重定向到“find”

时间:2013-02-20 03:10:35

标签: linux shell

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

我尝试了以下命令:

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

但它给了我以下错误:

find: paths must precede expression: XYZ.java

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分: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中向-iname传递2个参数。

答案 1 :(得分:0)

find / home / ABC / testDir -name“\ .java”