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