Как делают я выполняюсь, находят с GNU xargs пересекать ряд каталогов?

$ echo {a,b,c}.h d e.h |xargs -IA find A -name '*.h'
find: `a.h b.h c.h d e.h': No such file or directory
$ echo -e a.h\\nb.h c.h d e.h |xargs -IA find A -name '*.h'
a.h
find: `b.h c.h d e.h': No such file or directory

Проблема - это -I подразумевает, что xargs предположит, что аргументы разграничены новой строкой. Я не уверен, почему это. Я считаю, что могу решить эту проблему с sed, но интересно, существует ли прием xargs или идиома, я не знаком с тем, люди используют для решения этого.

Я ищу решение, которое будет также работать над OS X. На OS X xargs-J переключатель, кажется, хорошо работает. Страница справочника утверждает, что этот переключатель будет просто управлять, куда аргументы помещаются для исполняемого файла - который является точно, что я хочу.

0
задан 07.02.2010, 21:49

4 ответа

Хм. Вам нужны канал и xargs? Кажется, что для всего Вашего примера действительно нужно, find и echo.

Я предполагаю, что это - часть большей загадки, таким образом, это не может работать в контексте того, что Вы делаете, но Ваш пример мог быть записан как:

$ find `echo {a,b,c}.h d e.h` -name '*.h'

$ find $(echo {a,b,c}.h d e.h) -name '*.h'

... который, в моей системе, результатах в find проверка каждого аргумента индивидуально:

find: `a.h': No such file or directory
find: `b.h': No such file or directory
find: `c.h': No such file or directory
find: `d': No such file or directory
find: `e.h': No such file or directory

У меня нет машины OSX для тестирования с, и они могут быть определенными для удара.

0
ответ дан 27.11.2019, 20:05

Почему не просто find {a,b,c}.h d e.h -name '*.h'?

0
ответ дан 27.11.2019, 20:05

Вы пробовали-d опцию к xargs?

justin@eee:~$ echo {a,b,c}.h d e.h |xargs -d ' ' -n1  -IA echo foo A
foo a.h
foo b.h
foo c.h
foo d
foo e.h

или еще более простой,

justin@eee:~$ for x in $(echo {a,b,c}.h d e.h);do echo foo $x;done
foo a.h
foo b.h
foo c.h
foo d
foo e.h
0
ответ дан 27.11.2019, 20:05

Использование параллель GNU:

parallel -q find {} -name '*.h' ::: {a,b,c}.h d e.h

Посмотрите вводное видео для узнавания больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ

0
ответ дан 27.11.2019, 20:05

Теги

Похожие вопросы