У меня проблема; 1) я использую команду find для поиска каталогов; 2) Мне нужно выполнить еще одну команду поиска в ранее найденных каталогах. Я хочу что-то вроде этой find . -type d -not -name bad | xargs find {0} * Можно ли как-то указать xargs, куда поместить результат предыдущего вывода команды {0}.

Я нашел решение, используя -exec вместо команды xargs:find . -type d -not -name bad -exec find {} -name '*' \;

Но лично мне больше нравится xargs, возможно ли это сделать с помощью xargs?

2 ответа2

1

Если я правильно понимаю ваше требование, вам лучше сделать что-то более похожее на:

find . -type d | grep -i <bad> | xargs -i find {} -type f

Канал через grep является более личным предпочтением - вы можете продолжать использовать аргументы для find чтобы исключить каталоги, которые вам не интересны. Ключевым моментом здесь является ключ -i к xargs и использование {} вместо {0} .

0

find + xargs без использования -print0 может быть опасным. Узнайте, почему: http://en.wikipedia.org/wiki/Xargs#The_separator_problem

Вы можете вместо этого использовать GNU Parallel:

find . -type d | grep -i <bad> | parallel find {} -type f

Подробнее: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .