remover o comando rm não funciona com curingas no Mac OS X

2

Eu estou tentando remover o arquivo abaixo para todas as contas de usuário através de um script bash mas o curinga * parece não funcionar. Eu tenho testado o script localmente, executando-o no mac os x terminal.

Arquivo plist a ser excluído: 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

O código acima não exclui o arquivo em questão, mas funciona se eu apontar para o nome exato do arquivo sem o caractere curinga. Eu tentei remover aspas também, mas ainda não exclui o arquivo. Alguém poderia ajudar por favor?

mgrev
fonte
2
rm não é problema seu; correspondência de caractere curinga em [[-e]] é. Vejo stackoverflow.com/questions/6363441/…
Shaun

Respostas:

2
if [[ -e "${dir}/Library/Preferences/com.apple.eap.bindings.*" ]]; then

Nesta linha você coloca o asterisco entre aspas duplas. Isso faz dele um char literal e não algo que magicamente se expande para filename (s).

Links: aspas duplas-vs-asterisco-nome-de-arquivo-expansão-em-bash assim como o post já apontado por Shaun .

Você terá que usar o asterisco sem aspas. Seja como na primeira parte do seu script ou como um argumento para find.

Hennes
fonte
1
A remoção das cotações falhará se o asterisco corresponder a mais de um arquivo. Melhor usar if [ -z "$(echo ${dir}/Library/Preferences/com.apple.eap.bindings.*|grep -q '*')" ]; then
AFH
Obrigado Obrigado AFH! Isso funciona perfeitamente! Essa coisa estava começando a comer meu cérebro. Agora isso é o que eu chamo de um & amp; compreendendo a resposta do fórum :)
mgrev
2

Você poderia considerar isso como uma alternativa

#!/bin/bash
/usr/bin/find /Users/*/Library/Preferences -name "com.apple.eap.bindings.*.plist" -exec /bin/rm -fv "{}" \;

Isso efetivamente removerá os arquivos em questão. Remova a opção 'v' se você não quiser saída.

Mutant
fonte
1

Se isso ajudar alguém, é o que funciona para mim:

#!/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
mgrev
fonte