eliminar el comando rm que no funciona con comodines en Mac OS X

eliminar el comando rm que no funciona con comodines en Mac OS X

Estoy intentando eliminar el siguiente archivo para todas las cuentas de usuario mediante un script bash, pero el comodín * no parece funcionar. He estado probando el script localmente ejecutándolo en la terminal mac os x.

Archivo plist que se eliminará: 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

El código anterior no elimina el archivo en cuestión, pero funciona si señalo el nombre exacto del archivo sin el comodín. También intenté eliminar las comillas pero todavía no elimino el archivo. ¿Alguien podría ayudar por favor?

Respuesta1

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

En esta línea pones el asterisco entre comillas dobles. Eso lo convierte en un carácter literal y no en algo que se expande mágicamente a nombres de archivo.

Enlaces:comillas-dobles-vs-asterisco-nombre-de-archivo-expansión-en-bashasí comola publicación ya señalada por Shaun.

Tendrás que utilizar el asterisco sin comillas. Ya sea como en la primera parte de tu guión o como argumento parafind.

Respuesta2

Podrías considerar esto como una alternativa.

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

Esto eliminará efectivamente los archivos en cuestión. Retire el interruptor 'v' si no desea salida.

Respuesta3

Si esto debería ayudar a alguien, esto es lo que funciona para mí:

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

información relacionada