Вы хотите перечислить все php-файлы, которые содержат строку standard
?Если это так, я бы использовал grep -r
:
grep -r -l 'standard' . | grep '\.php$'
Как указано в моем комментарии к вашему вопросу, имя сценария отсутствует, поскольку вы не выполняете файл сценария.Предполагая, что вы хотите напечатать имя файла, которое передается в xargs / perl, используйте $ARGV[0]
, чтобы получить первый позиционный параметр для вызова perl (xargs автоматически добавляет его в командную строку). Вместо этого см. Ответ TLP
Вы также должны использовать find -print0 | xargs -0
для правильной обработки файлов с символами новой строки.
Расширение фрагмента grep: также возможно использовать grep внутри новой оболочки после фильтрациис помощью команды find:
find . -name '*.php' -print0 | \
xargs -0 -L1 sh -c 'grep -l "pattern" "$1"' -
xarsg -L1
, чтобы передать только одно имя файла в новую оболочку.grep -l "$1"
чтобы напечатать имя файла и прекратить поиск после первого совпадения.-
в качестве первого параметра для sh необходимо, чтобы $1
работал.
Еще одно редактирование ...
Я думал, что это сложно.Последняя команда может быть легко упрощена до:
find . -name '*.php' -print0 | xargs -0 grep -l "pattern"
Это, конечно, не так легко расширить, как версия sh -c
, которая может делать практически все.