Я хочу подсчитать общее количество строк во всех /etc
файлах, но не в файлах в подкаталогах, поэтому я набрал: wc -l /etc/* | tail -1
и результат будет такой:
xxxx is a directory
yyyy is a directory
total 1752
Мой вопрос, как я могу избавиться (удалить) эти комментарии, и есть ли лучший способ сделать этот тип подсчета?
Ответы:
Вы можете вывести сообщения об ошибках в / dev / null
С помощью этой команды вы видите только количество строк в файлах, которые доступны для чтения всем пользователям. Чтобы увидеть количество строк во всех файлах, вам нужно повысить уровень команды
sudo
.источник
Изолировать файлы и запустить на них wc
То, что
wc -l /etc/*
делает это,*
будет распространяться на все элементы внутри/etc/
каталога. Таким образом, цель состоит в том, чтобы затем изолировать файлы и выполнитьwc
на них. Есть несколько способов сделать это.для цикла с тестом
Команда
test
, или, более часто, сокращенно as,[
может использоваться для определения того, является ли элемент обычным файлом, например так:Таким образом, мы можем перебирать все элементы
/etc/
и запускатьwc
их, если и только если вышеприведенная команда возвращает true. Вот так:находить
Мы также можем использовать
find
с-maxdepth
,-type
и-exec
флагамиfind /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepth
информирует о том, как глубоко в структуре каталогов идти; значение 1 означает только те файлы в каталоге, который мы хотим.-type f
говорит ему искать обычные файлы, ИЛИ (представленные-o
флагом) для символических ссылок (представленныхtype l
). Все эти качества заключены в квадратные скобки,()
с\
которыми экранируются, так что оболочка интерпретирует их как частьfind
команды, а не как-то еще.-exec COMMAND {} +
Структура здесь запускает любую команду, которую мы ей даем,+
указывая , что нужно взять все найденные файлы и вставить их в качестве аргументов командной строки в КОМАНДУ.Чтобы получить общее количество, мы могли бы выводить трубу
tail
такПримечание
Его проще использовать
wc -l /etc/* 2>/dev/null | tail -1
, как в ответе Л.Дж Джеймса, однако этоfind
должно стать частью привычки иметь дело с файлами, чтобы избежать обработки сложных имен файлов. Подробнее об этом читайте в эссе « Как правильно обращаться с именами файлов»источник
find
делает это легко:Выход:
НО, если вы просто хотите, чтобы число выводилось и ничего больше:
РЕДАКТИРОВАТЬ :
newlines
ошибка кос сказал, преобладает. Только используя-exec
это исправляет. Также/etc
не содержит таких файлов.Выход:
Как указано в kos , приведенная выше команда может быть уменьшена до:
РЕДАКТИРОВАТЬ :
newlines
ошибка кос сказал, преобладает. Только используя-exec
это исправляет. Также/etc
не содержит таких файлов.Выход:
источник
-iname '*'
? неfind
соответствует всем по умолчанию?'*'
.Использование z-shell (
zsh
), королевы оболочек , вместо bash.источник