私は、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