bash - количество файлов в каталоге и общее количество в конце - PullRequest
1 голос
/ 01 мая 2020

Ubuntu 18.04 LTS с bash 4.4.20

Я пытаюсь подсчитать количество файлов в каждом каталоге, начиная с каталога, в котором я выполнял скрипт. Заимствуя у других кодеров, я нашел этот скрипт и изменил его. Я пытаюсь изменить его, чтобы получить итоговое значение в конце, но я не могу его получить. Кроме того, скрипт запускает одну и ту же функцию подсчета дважды каждый l oop, и это неэффективно. Я вставил эту дополнительную команду поиска, потому что не смог получить результаты вложенного ' find | w c -l 'для хранения в переменной. И все равно это не сработало.

Спасибо!

#!/bin/bash

count=0
find . -maxdepth 1 -mindepth 1 -type d | sort -n | while read dir; do
  printf "%-25.25s : " "$dir"
  find "$dir" -type f | wc -l
  filesthisdir=$(find "$dir" -type f | wc -l)
  count=$count+$filesthisdir
done

echo "Total files : $count"

Вот результаты. Следует подвести итоги. В противном случае это будет хорошо работать.

./1800wls1                : 1086
./1800wls2                : 1154
./1900wls-in1             : 780
./1900wls-in2             : 395
./1900wls-in3             : 0
./1900wls-out1            : 8
./1900wls-out2            : 304
./1900wls-out3            : 160
./test                    : 0
Total files : 0

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Используйте (( count += filesthisdir)) и подумайте о подсчете файлов с символами новой строки.
Вам следует изменить команду поиска:

filesthisdir=$(find "$dir" -type f -exec echo . \;| wc -l)
1 голос
/ 01 мая 2020

Это не работает, потому что while l oop выполняется в субоболочке. Используя <<<, вы убедитесь, что он выполняется в текущей оболочке.

#!/bin/bash

count=0
while read dir; do
  printf "%-25.25s : " "$dir"
  find "$dir" -type f | wc -l
  filesthisdir=$(find "$dir" -type f | wc -l)
  ((count+=filesthisdir))
done <<< "$(find . -maxdepth 1 -mindepth 1 -type d | sort -n)"

echo "Total files : $count"

Конечно, вы также можете использовать для l oop:

for i in "$(find . -maxdepth 1 -mindepth 1 -type d | sort -n)"; do
  # do something
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...