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

2

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

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?

    
por mgrev 28.10.2014 / 20:32

3 respostas

2

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

Nesta linha, você coloca o asterisco entre aspas duplas. Isso torna um caracter literal e não algo que magicamente se expande para o (s) nome (s) de arquivo (s).

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

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

    
por 28.10.2014 / 20:57
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 removerá efetivamente os arquivos em questão. Remova a opção 'v' se você não quiser saída.

    
por 29.10.2014 / 06:26
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
    
por 28.10.2014 / 22:30