我有某些命令的输出文件名称的列表。 我需要找到这些文件在一个特定的目录中。
我想下面的命令:
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 "\.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##*/}
而不是基名。 要么;
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。
查找/主页/ ABC / -name TESTDIR “\的.java”