Samba 4.11 и des-cbc-md5

Первый способ упростить скрипт — это сохранить количество файлов в переменной, чтобы вам не приходилось его пересчитывать.

Другие способы узнать количество файлов в текущем каталоге:

n=$(ls -l | grep -c ^-)

Здесь упрощение заключается в использовании опции -cкоманды grep для подсчета совпадений. Существует риск ошибочного подсчета совпадений при анализе вывода ls , если есть файл с именем $'some\n-file', который якобы ставит дефис в начале строки.

n=$(stat -c %F -- * | grep -c 'regular.*file')

.*в grep учитывает совпадения как «обычный файл», так и «обычный пустой файл». Команда stat выводит тип каждого файла, а глобус оболочки *позволяет избежать проблем с ls.

Если вы знакомы с bash, но слышали о zsh и его мощном синтаксисе подстановки имен файлов , вы можете:

n=$(zsh -c 'a=( *(.) ); echo ${#a}')

Где мы создаем массив с именем a, который заполняется списком файлов *, отфильтрованных только «обычными файлами» с ..

Чтобы правильно напечатать множественное число, рассмотрим оператор case:

case $n in
(1) printf "1 file";;
(*) printf "$n files";;
esac

Оператор case обеспечивает большую гибкость, если вы хотите напечатать разные сообщения для разного количества файлов, например :"Нет файлов!".

Проще говоря, рассмотрим условное:

[[ $n == 1 ]] && printf "1 file" || printf "$n files"

Наконец-то сошлись на предложении стилдрайвера:

n=$( files=(*); dirs=(*/); echo $(( ${#files[@]} - ${#dirs[@]} )))
printf "%d file%s" "$n" "$(test "$n" -ne 1 && echo s)"

Это присваивает значениеn(в конечном итоге )путем открытия подстановки команд; внутри этой временной подстановки команд я создаю два массива:filesдля всего и dirsтолько для каталогов. Последним действием подстановки команд является сообщение о разнице между ними. Затем printfвыводит количество файлов вместе с соответствующим суффиксом множественного числа.

Здесь используются все настройки, которые у вас есть для dotglob; если вы хотите принудительно подсчитать (или пропустить )точечные -файлы,затем вы должны установить или отключить dotglobвнутри подстановки команды:

использовать текущее значение dotglob:

n=$( files=(*); dirs=(*/); echo $(( ${#files[@]} - ${#dirs[@]} )))

включить подсчет точечных -файлов независимо от текущего точечного глобуса:

n=$(shopt -s dotglob;
    files=(*); dirs=(*/); echo $(( ${#files[@]} - ${#dirs[@]} )))

принудительно запретить подсчет точечных -файлов независимо от текущего точечного глобуса:

n=$(shopt -u dotglob;
    files=(*); dirs=(*/); echo $(( ${#files[@]} - ${#dirs[@]} )))

2
01.12.2019, 04:25
1 ответ

Решение найдено. Fedora из соображений безопасности, в последнем выпуске samba (4.10,4.11 )примените патч, чтобы полностью удалить неуверенность в шифровании. Даже последний релиз керберос (1.18 )убрал это шифрование, и теперь патч вроде бы в дереве последних исходников самбы (4.12rc)

0
01.03.2020, 20:05

Теги

Похожие вопросы