Как проверить версию с помощью команды xargs в Bash? - PullRequest
2 голосов
/ 22 сентября 2011

Пожалуйста, рассмотрите следующий сценарий:

$ find / -type f -name httpd
/opt/httpd.bin/httpd
/etc/rc.d/init.d/httpd
/usr/sbin/httpd
......

Я хотел бы проверить все результаты, используя опцию -version, например:

/usr/sbin/httpd -version

Но я не могу написатькоманда xargs, это возможно?Большое спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

xargs не совсем подходящий инструмент для работы, хотя цикл for будет работать:

for httpd in $(find / -type f -name httpd)
do
    $httpd --version
done

Если у вас тысячи httpd с, вы можете столкнуться спроблема с длиной вывода $(find...), но у вас, вероятно, больше проблем на руках, если у вас столько httpd s.

1 голос
/ 22 сентября 2011

Вы можете использовать xargs для проверки версии следующим образом:

find ./ -type f -name httpd | xargs -n1 -I{} bash -c "{} --version"

Но я бы не рекомендовал, это громоздко

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

find ./ -type f -name httpd -exec {} --version \; -print

(с опцией печати)

Обратите внимание, что вы действительно хотите выполнить все эти файлы. /Etc/rc.d/init.d/httpd может не знать, что означает --version, некоторые из них могут не выполняться.

...