我有一个文件名列表作为某些命令的输出。我需要在给定目录中找到这些文件中的每一个。
我尝试了以下命令:
ls -R /home/ABC/testDir/ | grep "\.java" | xargs find /home/ABC/someAnotherDir -iname
但它给了我以下错误:
find: paths must precede expression: XYZ.java
什么是正确的方法?
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。
查找 /home/ABC/testDir -name "\.java"