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 での二重引用符とアスタリスクのファイル名展開同様にショーンがすでに指摘した投稿

アスタリスクは引用符なしで使用する必要があります。スクリプトの最初の部分または引数として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

関連情報