Как найти самый длинный заголовочный файл (.h) в каталоге / usr - PullRequest
0 голосов
/ 14 марта 2020

Как найти заголовочный файл самого большого размера (по длине) (.h) в каталоге / usr? Искать в подкаталогах тоже. Я сделал это следующим образом:

find . - name *.h | xargs awk | sort -n | less .

Но при этом выводятся только все файлы с расширением .h и их размеры

Ответы [ 2 ]

2 голосов
/ 14 марта 2020

С инструментами GNU:

find /usr -type f -name "*.h" -printf "%s %p\0" | sort -zrnk1,1 | head -zn1 | tr '\0' '\n'

Это разрешает имена файлов с символами новой строки, find выводит завершенную строку NUL, и следующие команды используют NUL в качестве разделителя вместо новой строки. В конце конвейера tr преобразует разделитель обратно в новую строку.

Если вам нужно только имя файла, добавьте cut, чтобы удалить первое разделенное пробелами поле:

find /usr -type f -name "*.h" -printf "%s %p\0" | sort -zrnk1,1 | head -zn1 | 
  tr '\0' '\n' | cut -d' ' -f2-
1 голос
/ 14 марта 2020

Что-то вроде

 find /usr -name "*.h" -printf "%s\t%p\n" | awk '$1 > maxsize { maxsize = $1; maxline = $0 } END { print maxline }'

(конечно, при условии, что ни один из файлов не имеет новых строк в именах)

или если у вас GNU datama sh доступно:

find /usr -name "*.h" -printf "%s\t%p\n" | datamash -f max 1 | cut -f1,2

С помощью команды GNU find команда -printf позволяет печатать много информации о файле, включая его размер в байтах (%s) и его имя (%p). Найти максимум из этого легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...