2013-02-20 3 views
0

У меня есть список имен файлов в качестве вывода определенной команды. Мне нужно найти каждый из этих файлов в данном каталоге.Linux: перенаправление вывода команды на «find»

Я попробовал следующую команду:

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

Но это дает мне следующую ошибку:

find: paths must precede expression: XYZ.java 

Что бы правильный способ сделать это?

ответ

3
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 или найти без использования нулевых байт в качестве имени файла separater, утверждая, что пробела в именах файлов будут вызывать проблемы. Эти люди обычно игнорируют новые строки в именах файлов, и их возражения можно смело игнорировать. (До тех пор, пока вы не позволяют пробелы в ваших имен файлов, то есть!)

Лучший вариант:

find /home/ABC/testDir -iname '*.java' -exec find . -iname {} 

Причина xargs не работает в том, что в том, что вы не можете передать 2 аргумента to -iname внутри find.

+0

Спасибо. Это решило мою проблему. Есть ли причина, по которой xargs и перенаправление каналов не работают с find? – sachinpkale

+1

Вы могли бы использовать флаг '-p' xargs, чтобы понять это: он запускает xargs в интерактивном режиме, печатая каждую команду, которую он собирается выполнить. Проблема здесь заключалась в том, что xargs сгенерировали команду _single_ 'find' с ** all ** добавленные имена файлов. В этом случае вам просто нужен параметр '--max-args', чтобы запустить 1 команду' find' для каждого имени файла в вашем списке: 'ls -R/home/ABC/testDir/| grep "\ .java" | xargs --max-args = 1 find/home/ABC/someAnotherDir -iname' –

0

находка/дома/ABC/testDir -name "\ .java"

+0

Это будет список .java-файлов в testDir. Я хочу найти все .java-файлы, которые присутствуют в testDir, в текущем каталоге. Возможно, я был недостаточно ясен. Позвольте мне изменить пример. – sachinpkale

Смежные вопросы