Я бы сделал это так:
find aaaa/ -type f -exec printf '%.s.' {} + | wc -c
Или, если GNU find доступен:
find aaaa/ -type f -printf '.' | wc -c
Но если вы настаиваете на продолжении своей логики - даже если это не такэффективно или практично, вам нужно выполнить подстановку и перенаправление команд в оболочке (см. комментарий Гордона ), например:
echo 0 > ct
find aaaa/ -type f -exec sh -c 'expr "$(cat ct)" + 1 > ct' \;
cat ct
При таком подходе 3 процесса (sh, cat, expr) для каждого файла создается, и файл создается, а затем обновляется n раз, где n - это количество файлов, что является большой тратой памяти и процессорного времени.
По крайней мере, вы могли бы использовать объемнуюкак:
echo 0 > ct
find aaaa/ -type f -exec sh -c 'expr "$(cat ct)" + "$#" > ct' _ {} +
cat ct