На этот вопрос уже есть ответ здесь:
Как я могу найти файл одновременно с просмотром размера файла? ОШИБКА: я попробовал эту команду, но получил только размер и информацию о других файлах.
find -name "*.conf" | ls -l
find
имеет a -ls
опция. Таким образом, Ваша команда должна быть похожей на это:
find -name '*.conf' -ls
Опция, указывают Ваш собственный формат с -printf
. Например, это произведет размер файла, сопровождаемый пространством затем имя файла (с относительным путем):
find -name "*.conf" -printf "%s %p\n"
Можно закончить строку формата \0
вместо \n
если Вы захотите NUL-разделить выходные записи находки, то в случае Вы ожидаете забавные имена файлов (например, те, которые включая новые строки).
Для записи не работает попытка, показанная в Вашем вопросе, потому что Вы пытаетесь передать вывод по каналу от find
вводить к ls
. ls
не читает входа из STDIN, таким образом, вывод от find
просто отбрасывается и затем ls
перечисляет содержание текущего каталога, как обычно.
Другие ответы уже указали
find
только, использование -printf
ls
вывод с find
только, использование -ls
find
вывод к другой программе с xargs
Однако первый и второй подход не дает точный вывод ls -l
( -ls
флаг равняется ls -dils
) и третьему нужно дополнительное xargs
звонить. С помощью -exec
флаг возможно звонить ls -l
непосредственно от find
:
find -name "*.conf" -exec ls -l {} +
Это дает целый список имен файлов как аргументы ls -l
и вызовы это так же так же много раз по мере необходимости.
Если Вы просто хотите соответствовать каждому файлу, заканчивающемуся в .conf
в и под текущим каталогом (и ARG_MAX
не проблема!), Вам на самом деле не нужно find
вообще. Вместо этого можно использовать bash
шарик, соответствующий globstar
и dotglob
опции оболочки следующим образом – это достаточно одинаково мудро не повредиться на новых строках в именах файлов и соответствует “скрытым” файлам как find
:
$ shopt -s globstar dotglob
$ ls -l **/*.conf
ls
не добирается его список файлов из стандарта ввел, он ожидает, что они будут аргументами. xargs
команда является общим средством для того, чтобы превратить вход в аргументы:
find -name '*.conf' | xargs ls -l
Однако это разделит вход в пробеле, таким образом, у Вас смогут быть проблемы, если какое-либо из имен имеет пробелы. find
и xargs
имейте опции, которые сотрудничают для смягчения этого:
find -name '*.conf' -print0 | xargs -0 ls -l
-0
опция к xargs
говорит этому использовать пустой байт в качестве разделителя между параметрами во входе, и -print0
говорит find
распечатать имена, разделенные пустым байтом вместо новой строки.