
Я пытаюсь использовать find . -type d -print | wc -m
where -m
или --chars
вывести количество символов в именах папок.
В качестве примера рассмотрим следующий снимок экрана, на котором показано количество символов дляtempFolder+tempFolder+dingdongFolderтолько34, и событие подсчета косых черт и точек все еще40. Почему команда print out43символы? Откуда взялись 3 дополнительных символа?
решение1
find . -type d -print | tr -d '\n' | wc -m
tr
удалит все символы новой строки и wc
подсчитает нужное вам количество.
решение2
Видимо, завершающие символы новой строки также считаются символами.
Предположим, вам нужно количество символов в каталоге, вы можете сделать это
$ find -type d -exec bash -c 'echo -n $0 | wc -m' {} \;
1
12
27
Что в сумме дает искомые 40. Обратите внимание, что echo -n
удаляет конечные символы новой строки.
Суммирование этих трех факторов также возможно.
$ find -type d -exec bash -c 'echo -n $0 | wc -m' {} \; | awk '{S+=$1} END {print(S)}'
40
решение3
Установите массив bash/ksh/zsh ct
для вывода wc -lm
, а затем используйте арифметику оболочки.
ct=($(find . -type d -print |wc -lm)); echo $((ct[1]-ct[0]))
Или используйте разделение полей и позиционные параметры:
set $(find . -type d -print |wc -lm); echo $(($2 - $1))