Я пытаюсь сохранить свою функцию inspect_files на принципе единой ответственности, я знаю, что я мог бы легко вычислить количество файлов внутри этой функции и распечатать ее там, но есть ли более элегантное решение для подсчета файлов, чем это?Подсчет файлов с Bash
(Обратите внимание, я не хочу рекурсивный количество файлов.)
# Snippet:
dir_name="$HOME/$1"
inspect_files() {
local content
for content in "$dir_name"/*; do
printf "%s\n" "${content##*/}"
done
count_files "$dir_name"
}
count_files() {
local count
local dir="$1"
count=$(ls -1 "$dir_name" | wc -l)
printf "\nTotal: %d\n" "$count"
}
if is_found "$dir_name"; then
inspect_files
else
echo 'Not a directory.'
fi
используйте утилиту wc. 'wc -l' печатает количество строк. 'ls $ dir_name/* | wc -l' должен заставить вас работать. или 'count = $ (ls $ dir_name/* | wc -l)' для хранения вывода в count. – hetepeperfan
Должно быть 'ls -1', чтобы каждое имя файла указывалось по одному в строке для использования с' wc'. Не все существующие реализации 'ls' делают это, независимо от того, является ли вывод терминальным устройством или нет. Существует также проблема псевдонимов, используемых для 'ls' с указанной опцией' -C', поэтому для переопределения этой опции необходимо использовать опцию '-1'. –