删除 Mac OS X 上不支持通配符的 rm 命令

删除 Mac OS X 上不支持通配符的 rm 命令

我正在尝试通过 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

相关内容