Ваш внешний find
не делает ничего, что вы не могли бы сделать с простым шаром.Это исключает слой кавычек (вместе с процессом sh
для каждого найденного каталога).
# Ignoring the issue of assuming no file name contains a newline
for d in ./*/; do
echo "$(find "$d" -type f | wc -l) $d"
done
Просто определите функцию оболочки, чтобы исключить второй слой, наложенный на аргумент alias
.
csfiles () {
for d in ./*/; do
echo "$(find "$d" -type f | wc -l) $d"
done
}
Оставшиеся вызовы на find
также могут быть заменены на цикл for
, устраняя проблемное предположение об одной строке для имени файла:
csfiles () {
for d in ./*/; do
echo "$(for f in "$d"/*; do [ -f "$f" ] && echo; done | wc -l) $d"
done
}
Вы можетеоставьте find
, если он поддерживает первичный -printf
, потому что вас не волнуют фактические имена файлов, просто вы получаете ровно одну строку вывода на файл.
csfiles () {
for d in ./*/; do
echo "$(find "$d" -type f -printf . | wc -l) $d"
done
}