Перечислить все файлы с количеством файлов в качестве одного из выходных столбцов в $ BASH?

#linux #bash #terminal #ls #wc

#linux #bash #терминал #ls #wc

Вопрос:

Есть ли способ отображать файлы аналогично ls -al , который также показывал бы количество файлов в перечисленных каталогах? Что-то вроде ls -al with ls -1 | wc -l в качестве последнего столбца? Я пробовал переключать аргументы и в значительной степени отказался от канала, потому что я сталкиваюсь с синтаксическими ошибками всякий раз, когда я пытаюсь сильно манипулировать результатами. По отдельности они золотые, поэтому я чувствую, что упускаю что-то очевидное. Способ изменить, ls чтобы он также показывал количество файлов в каталогах, которые он перечисляет, кажется, что так и должно быть, по крайней мере. Кто-нибудь знает способ заставить это работать?

Комментарии:

1. Нужно ли сохранять цвета?

2. Это выглядит великолепно! На самом деле меня не волнуют цвета, поскольку я могу настроить форматирование вручную. Эти два дают итоговые значения. Я могу использовать это для создания рекурсивной версии, чтобы показывать количество для каждого каталога. Спасибо! Это отлично работает!

Ответ №1:

Каталоги

 ls -al | awk '/^d/{d  }{print}END{print "Directories: "d}'
  

Все файлы

 ls -al | awk '{print}END{print "Files:" NR}'
  

Ответ №2:

Я думаю, что что-то вроде этого было бы ближе к тому, что вы хотите

 > mkdir testdir amp;amp; cd testdir amp;amp; touch a amp;amp; ln -s a b amp;amp; mkdir c amp;amp; touch c/{1..10}
> shopt -s dotglob; for i in *; do [[ -d $i ]] amp;amp; paste <(ls -ld "$i") <(find "$i" -mindepth 1 | wc -l) || ls -l "$i"; done 
-rw-rw-r-- 1 user user 0 Jul  8 00:04 a
lrwxrwxrwx 1 user user 1 Jul  8 00:04 b -> a
drwxrwxr-x 2 user user 4096 Jul  8 00:04 c/ 10