Поскольку это очень популярная тема, и хорошие ответы распространяются повсюду и рассматриваются в большой степени, я счел оправданным составить хорошие ответы от других в более сжатые формы, так что новички имеют простой обзор upfront:
grep -Zl 3456 * | xargs -0 ls -l
с GNU grep. Возможные варианты:
grep -Z
и xargs -0
: отдельные имена вывода с помощью NULL-байта вместо пробелов. Таким образом, вы можете обрабатывать имена файлов, которые включают пробелы. grep -l
: печатать только имена файлов, которые соответствуют ls -l
: стандартный ls
длинный вывод, который, как представляется, вы просите. Проверено на последнем cygwin.
Здесь нет необходимости в xargs
; find
может использоваться как для запуска grep
, так и для запуска ls
или даже для испускания самого выходного файла ls
.
find . -maxdepth 1 -type f \
-exec grep -q -e '1234567' -- '{}' ';' \
-exec ls -l {} +
... или, еще лучше:
find . -maxdepth 1 -type f \
-exec grep -q -e '1234567' -- '{}' ';' \
-ls
Действие -ls
использует выходной формат, похожий на ls -l
.