Если это не опечатка при публикации вашего вопроса, не должно быть дефиса до sh
:
Причина, по которой вы не получаете имен файлов в выходных данных, заключается в том, что grep
запускается с одним файлом в качестве аргумента. Для принудительного вывода имени файла используйте -H
.
find . -name "*.xml" | xargs -I {} sh -c "grep -H FOO {}"
Кроме того, -i
для xargs
устарело в версии 4.2.9. Вы должны использовать -I {}
.