Я пытаюсь удалить файл ниже для всех учетных записей пользователей через скрипт 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