Как я могу проверить, существуют ли скрытые файлы? - PullRequest
0 голосов
/ 06 февраля 2020

Adobe имеет возможность загружать шрифты, что является проблемой для нас в нашей отрасли. Я нашел расположение для этих файлов, и теперь я хочу создать группу Jamf Smart, чтобы проверить, были ли загружены шрифты.

Расположение файла /Users/$loggedInUser/Library/Application\ Support/Adobe/CoreSync/plugins/livetype/.r/.

Имена файлов представляют собой комбинацию чисел. Пример: .33805.otf.

Пока у меня есть ниже, но это не работает. Я продолжаю получать False вывод.

USERS="`ls /Users | grep -v "Shared"`" 

for Adobe in $USERS; do
    if  [[ -a "/Users/$Adobe/Library/Application\ Support/Adobe/CoreSync/plugins/livetype/.r/.[^.]*otf"  ]]  ; then
              echo "True"
    else
              echo "False"
    fi
done

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

Вы действительно хотите избежать ls здесь. Более надежное и портативное решение - просто l oop на матчах.

Из коробки оболочка делает не включать точечные файлы в общие результаты glob; но если вы включите точку как часть подстановочного знака, она развернется как обычно.

Вы не можете использовать двойные кавычки вокруг подстановочного знака; это приведет к изменению значения * с подстановочного знака на буквальную звездочку (и аналогично для других подстановочных знаков, таких как ?, [ и т. д. c).

for user in /Users/*; do
    case $user in *Shared*) continue;; esac
    for file in "$user/Library/Application Support/Adobe/CoreSync/plugins/livetype/.r/".[!.]*otf; do
        if [[ -a "$file" ]]; then
              echo "True"
        else
              echo "False"
        fi
        break
    done
done

double for l oop не совсем интуитивно понятно, но это хороший способ надежно проверить, соответствует ли подстановочный знак каким-либо файлам. Запустите al oop, но выполните только первую итерацию; если первый файл не существует, это означает, что оболочка не смогла раскрыть подстановочный знак и вернула его дословно. (Это стандартное и устаревшее поведение оболочки Bourne; современные оболочки имеют nullglob et c, который некоторые администраторы хотели бы включить для всех новых пользователей.)

0 голосов
/ 14 февраля 2020
shopt -s dotglob

for adobe in /users/*; do
   [[ $adobe == *Shared* ]] && continue  ##: skip the Shared match
    # do the rest of the stuff here    
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...