我正在尝试通过 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 中的双引号与星号文件名扩展也Shaun 已经指出的帖子。
您必须使用不带引号的星号。要么作为脚本的第一部分,要么作为参数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