Это не специфический вопрос для Ubuntu, он применим ко всем Unix / Linux.
Как я могу выполнить команду следующим образом:
find . -maxdepth 1 -type d -print -exec svn info "{}" | grep URL \;
Команда выше не делает то, что я хочу, я не могу передать вывод информации svn в grep. ]
Это работает, но вывод содержит гораздо больше, чем мне нужно:
find . -maxdepth 1 -type d -print -exec svn info "{}" \;
Есть идеи?
Обычно я нахожу xargs
намного более нормальный для использования, чем находка - исполнительная опция. Это особенно верно для ускорения вещей, так как отдельный "svn" не запускается для каждой строки вывода находки:
find . -maxdepth 1 -type d | xargs svn info | grep URL
Если Вы имеете дело с файлами со странными именами (пробелы, новые строки, и т.д.), просто добавьте -print0
найти и -0
к xargs:
find . -maxdepth 1 -type d -print0 | xargs -0 svn info | grep URL
Если Вы имеете дело с программой, которая может только взять 1 аргумент, можно использовать -n1
с xargs:
find . -maxdepth 1 -type d -print0 | xargs -0 -n1 svn info | grep URL
Вам нужна оболочка для интерпретации трубы.
find . -maxdepth 1 -type d -print -exec sh -c 'LANG=C svn info "$1" | grep URL' _ {} \;
См. http://mywiki.wooledge.org/UsingFind для дополнительных примеров.
Хотя. Я бы просто использовал для этого цикл for:
for svndir in ./*/.svn/; do
dir=${svndir%/.svn/}
echo "$dir"
LANG=C svn info "$dir" | grep URL
# or maybe just: sed '5!d;q' "$svndir/entries"
done
На самом деле я понял, что приведенное ниже делает то, что я хочу в этом случае:
find . -maxdepth 1 -type d -print -exec svn info "{}" \; | grep URL
, но я все еще хотел бы знать, как я могу передать вывод внутри exec find
find . -maxdepth 1 -type d -print -exec svn info "{}" \; | grep URL