Вопрос найти файл с «find» и показать размер файла [duplicate]


На этот вопрос уже есть ответ:

Как я могу найти файл одновременно с просмотром размера файла? ОШИБКА: Я пробовал эту команду, но я получил только размер и информацию о других файлах.

find -name "*.conf" | ls -l

5
2018-05-21 16:42


происхождения




ответы:


find имеет -ls вариант. Поэтому ваша команда должна выглядеть так:

find -name '*.conf' -ls

12
2018-05-21 16:48





Опция указывает ваш собственный формат с -printf, Например, это выведет размер файла, за которым следует пробел, а затем имя файла (с относительным путем):

find -name "*.conf" -printf "%s %p\n"

Вы можете завершить строку форматирования с помощью \0 вместо \n если вы хотите, чтобы NUL-отдельный вывод выводил выходные записи, в случае, если вы ожидаете забавные имена файлов (например, те, которые включают в себя новые строки).


Для записи попытка, показанная в вашем вопросе, не работает, потому что вы пытаетесь выполнить вывод из find для ввода ls, ls не читает ввода STDIN, поэтому вывод из find просто отбрасывается, а затем ls как обычно, перечисляет содержимое текущего каталога.


7
2018-05-21 19:05





Другие ответы уже указывали

  1. как распечатать файлы с помощью find только, используя -printf
  2. как получить ls выход с find только, используя -ls
  3. как правильно труба 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 shell, как показано ниже, - это настолько же разумно, чтобы не ломать символы новой строки в именах файлов и не сочетать «скрытые» файлы, такие как find:

$ shopt -s globstar dotglob
$ ls -l **/*.conf

3
2018-05-22 09:31





ls не получает свой список файлов со стандартного ввода, он ожидает, что они будут аргументами. xargs команда является общим средством для ввода ввода в аргументы:

find -name '*.conf' | xargs ls -l

Однако это будет разделять входные данные в пустое пространство, поэтому у вас могут быть проблемы, если какое-либо из имен имеет пробелы. find а также xargs есть варианты, которые работают вместе, чтобы смягчить это:

find -name '*.conf' -print0 | xargs -0 ls -l

-0 вариант xargs говорит ему использовать нулевой байт в качестве разделителя между параметрами на входе и -print0 говорит find для печати имен, разделенных нулевым байтом вместо новой строки.


2
2018-05-22 00:36