Получение количества файлов во время итерации через каталоги и папки

recursiveprint() { #FILES_COUNT=0 cd $1 for d in *; do if [ -d "$d" ]; then (recursiveprint "$d") fi if [ -f "$d" ]; then file_name=$(basename "$d") ((FILES_COUNT++)) clear echo "$file_name" echo "total count = $FILES_COUNT" fi done } recursiveprint ${START_DIR} 

Проблема заключается в том, что после того, как она проходит через одну папку, она устанавливает счетчик обратно до нуля перед повторением через другую папку. В общем, у меня есть 30 файлов в разных папках, количество которых заканчивается 6, т. Е. Количество файлов в последней папке, через которую выполняется итерация. Любые советы о том, как это решить?

3 Solutions collect form web for “Получение количества файлов во время итерации через каталоги и папки”

 if [ -d "$d" ]; then (recursiveprint "$d") fi 

Скобка, окружающая линию (recursiveprint "$d") запускает функцию в подоболочке. Когда начинается подоболочка, клонируется значение FILES_COUNT , а изменения, сделанные в рекурсивном вызове внутри подоболочки, не действуют в окружающей среде.

Без подоболочки он должен работать лучше, но тогда вам нужно вручную вернуться к родительскому каталогу при возврате из экземпляра функции. cd .. сделал бы для вызовов, сделанных внутри функции, но давайте использовать переменную, чтобы мы могли вернуться к исходному рабочему каталогу, даже если он задан как абсолютный путь.

 recursiveprint() { local oldpwd=$PWD cd "$1" ... if [ -d "$d" ]; then recursiveprint "$d" # no parenthesis here fi ... cd "$oldpwd" } 

Также обратите внимание, что * не соответствует именам файлов, начинающимся с точки по умолчанию, используйте shopt -s dotglob , если хотите.

не будет

find /my/dir/ -type f | grep -c .

работа для вас?

 find .// -type f | grep -c '^\.//' 

будет надежно подсчитывать все файлы (даже те, которые содержат новые строки в своих именах).

  • выберите одну из двух программ в сценарии bash
  • Выводить несколько файлов из одного grep?
  • В чем смысл «ln -sf» в Linux?
  • утечка памяти с помощью сценария оболочки и tty
  • Можем ли мы транслировать в tmux
  • Условный код плохо работает
  • ошибки времени выполнения, откуда они взялись?
  • Создавать копии файлов в одном каталоге
  • как грамматика оболочки POSIX принимает FOO = bar foobar
  • выполнить сценарии оболочки
  • Unix> перезаписать команду?
  • Как узнать, находится ли я в оболочке без входа или в оболочке входа?
  • Linux и Unix - лучшая ОС в мире.