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

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 '^\.//' 

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

  • для каждого с массивом с несколькими элементами
  • Как определить функцию `bc` для последующего использования?
  • Как эта команда легальна? "> File1 <file2 cat"
  • Магический файл, перенаправляющий на стандартный вывод
  • обрабатывать имена файлов с помощью «-», начиная с linux
  • Хотя цикл не проверяет условие в оболочке
  • Может ли процесс вернуться к завершению? (AIX / КШ)
  • Как запустить программу из оболочки bash без ее запуска в процессе оболочки
  • скрипт crontab по сравнению с ручным запуском
  • Как добавить методы для спешки (Ruby shell)?
  • «Сбор» файлов для дальнейшей обработки
  • Linux и Unix - лучшая ОС в мире.