На моей FreeBSD 10.1 Я пишу маленький кусочек кода, который в основном вызывает ls
и автоматически разбивает результаты вниз на что-то вроде этого:Печать этикеток с использованием AWK
directory:
2.4M .git
528K src
380K dist
184K test
file:
856K CONDUCT.md
20K README.md
........
Вам только нужно будет перечислить каталоги и обычные файлы, и вам не нужно указывать .
..
, но вы должны перечислять скрытые файлы и сортировать их от самых больших до небольших по отдельности.
Задача состоит в том, чтобы завершить это как команду одной строки без использования$(cmd)
, &&
, ||
, >
, >>
, <
, ;
, &
и в течение 12 труб (обратные кавычки рассчитывать, а).
В настоящее время мой прогресс:
ls -Alh | sort -d -h -r |
awk 'BEGIN {print "Directories:"}
NR>1 {if(substr($1,1,1)~"d")print" "$5" "$9}'
, который не печатает только до последнего пункта каталога. Но так как вся команда будет выводиться после каждой записи, я не могу найти способ распечатать files:
только один раз, а затем распечатать оставшийся вывод.
Опция '-h' для сортировки находится в GNU и FreeBSD' sort', но не в Mac OS X 'sort' (что интересно, потому что это происходит от BSD). Размеры каталогов меня интригуют: в Mac OS X каталоги возвращаются с небольшими номерами (длина имен в каталоге плюс некоторые накладные расходы для каждого имени), а не дисковое пространство, используемое содержимым. Определяет ли FreeBSD 'ls' размер содержимого каталогов? Или вам нужно использовать 'du -s -h', чтобы получить их? (У меня есть несколько кириллических файлов UTF-8 в каталоге, в котором я играю, и 'sort -d -r' зажимает их, если не задано значение« LC_ALL = C ».) –