Команда remove rm не работает с подстановочными знаками в Mac OS X

Команда remove rm не работает с подстановочными знаками в Mac OS X

Я пытаюсь удалить файл ниже для всех учетных записей пользователей через скрипт bash, но подстановочный знак *, похоже, не работает. Я тестировал скрипт локально, запустив его на терминале mac os x.

Файл 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

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

решение1

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

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

Ссылки:двойные-кавычки-против-звездочки-расширение-имен-файлов-в-bashа такжепост, на который уже указал Шон.

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

решение2

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

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

Это эффективно удалит указанные файлы. Удалите переключатель 'v', если вам не нужен вывод.

решение3

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

#!/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

Связанный контент