Вот еще один способ считать подкаталоги (нерекурсивно) в Bash:
(
shopt -s nullglob dotglob
printf '%s\000' */ | tr -dc '\0' | wc -c # wc counts null bytes
)
Поскольку каждое имя файла завершается символом ASCII NUL, это должно работать правильно, даже если имя файла содержит символ новой строки.
Вы могли использовать что-то вроде этого, но это действительно не рекомендуется:
{ rm logfile.log && tail -n 100000 > logfile.log ;} < logfile.log
Это лучше:
tail -n 100000 logfile.log > _tmp_ &&
mv -- _tmp_ logfile.log