Переустановите два пакета, содержащие libprotobuf.so.8, libprotobuf-c.so.0
apt-get install --reinstall libprotobuf8 libprotobuf-c0
Если Ubuntu sudo apt-get install --reinstall libprotobuf8 libprotobuf-c0
Вероятно, вы захотите просто использовать find
. Предполагая, что у вас нет файлов с новыми строками в именах, подойдет что-то вроде этого:
find "$dir" -type f | wc -l
-type f
соответствует обычным файлам, но не каталогам, каналам, сокетам или чему-либо еще.
Обычный вывод find
разделяет имена файлов символами новой строки, поэтому, если какое-либо из имен содержит символы новой строки, вывод будет неоднозначным. С GNU find будет работать что-то вроде этого:
find "$dir" -type f -printf. | wc -c
Это find
печатает только точку для каждого файла и подсчитывает точки.
В других версиях find
-printf
нет, но мы можем использовать прием передачи входного пути с двойной косой чертой. Они обрабатываются как одна косая черта, но в противном случае они не будут естественным образом отображаться в выходных данных, поскольку имена файлов не могут содержать косые черты. Затем подсчитайте двойные косые черты -в выводе :
find "$dir//" -type -f | grep -c //
Если мы хотим сделать это исключительно с помощью сценария оболочки, перечислите имена файлов, нет необходимости использовать ls
, например. в Баше:
#!/bin/bash
files=0
shopt -s dotglob
countfiles() {
local f;
for f in * ; do
if [ -f "$f" ] ; then # count regular files
files=$((files + 1))
elif [ -d "$f" ] ; then # recurse into directories
cd "$f"
countfiles
cd..
fi
done
}
cd "$1"
countfiles
echo $files
Вы можете получить количество файлов в каталоге и подкаталогах, используя:
find path_to_directory -type f | wc -l
Why does it always count the files +1 except for the master directory?
Причина ls -la также добавляет строку total 20
к выходным данным. Я вижу, что для «главного» каталога также отображается значение +1.
Why does it count anything in the '.config' directory, as there are no files in there?
По той же причине. total..
строка, созданная ls
.
How can I fix this?
Не используйте свой скрипт :)Я имею в виду на самом деле, это слишком сложно. У нас тут хороший find
. Весь ваш скрипт превратится во что-то вроде этого (, если вам нужны файлы на каталог):
find $yourdir -type d | while read dir ; do
echo "$dir == $(find $dir -maxdepth 1 -type f | wc -l) files" ;
done
или просто (, если вам нужно значение суммы):
find $yourdir -type f | wc -l