Linux操作系统:重定向命令的输出去“找”(Linux: Redirecting output o

2019-11-01 14:29发布

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

我想下面的命令:

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

但它给我以下错误:

find: paths must precede expression: XYZ.java

什么是做正确的方式?

Answer 1:

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

您还可以使用${f##*/}而不是基名。 要么;

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的不工作的原因是,是,你不能传递2个参数内找到-iname。



Answer 2:

查找/主页/ ABC / -name TESTDIR “\的.java”



文章来源: Linux: Redirecting output of a command to “find”
标签: linux shell