2

Я пытаюсь удалить приведенный ниже файл для всех учетных записей пользователей с помощью bash-скрипта, но подстановочный знак * не работает. Я тестировал скрипт локально, запустив его на Mac OS X Terminal.

Файл Plist, который нужно удалить: com.apple.eap.bindings.XXXXXXX.plist

#!/bin/bash

for dir in /Users/*;
do
    if [[ -e "${dir}/Library/Preferences/com.apple.eap.bindings.*" ]]; then
        rm "${dir}/Library/Preferences/com.apple.eap.bindings.*"
    fi
done

Приведенный выше код не удаляет рассматриваемый файл, но он работает, если я указываю точное имя файла без подстановочного знака. Я также пытался удалить кавычки, но файл все равно не удаляется. Может ли кто-нибудь помочь, пожалуйста?

3 ответа3

2

Вы могли бы рассмотреть это как альтернативу

#!/bin/bash
/usr/bin/find /Users/*/Library/Preferences -name "com.apple.eap.bindings.*.plist" -exec /bin/rm -fv "{}" \;

Это эффективно удалит файлы, о которых идет речь. Удалите переключатель «v», если вы не хотите вывод.

2
if [[ -e "${dir}/Library/Preferences/com.apple.eap.bindings.*" ]]; then

В этой строке вы ставите звездочку в двойные кавычки. Это делает его буквальным символом, а не чем-то, что волшебным образом расширяется до имени файла (ов).

Ссылки: double-quotes-vs-asterisk-filename-extension-in-bash, а также пост, на который уже указал Shaun.

Вам придется использовать звездочку без кавычек. Как в первой части вашего скрипта, так и в качестве аргумента для find.

1

Если это должно помочь кому-то там, это то, что работает для меня:

#!/bin/bash

for dir in /Users/*;
do
    if [ -z "$(echo ${dir}/Library/Preferences/com.apple.eap.bindings.*|grep -q '*')" ]; then
        rm ${dir}/Library/Preferences/com.apple.eap.bindings.*
    fi
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .