Der Befehl „remove rm“ funktioniert unter Mac OS X nicht mit Platzhaltern

Der Befehl „remove rm“ funktioniert unter Mac OS X nicht mit Platzhaltern

Ich versuche, die folgende Datei für alle Benutzerkonten über ein Bash-Skript zu entfernen, aber das Platzhalterzeichen * scheint nicht zu funktionieren. Ich habe das Skript lokal getestet, indem ich es auf einem Mac OS X-Terminal ausgeführt habe.

Zu löschende Plist-Datei: 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

Der obige Code löscht die betreffende Datei nicht, funktioniert aber, wenn ich auf den genauen Dateinamen ohne Platzhalter zeige. Ich habe auch versucht, die Anführungszeichen zu entfernen, aber die Datei wird trotzdem nicht gelöscht. Kann mir bitte jemand helfen?

Antwort1

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

In dieser Zeile setzen Sie das Sternchen in doppelte Anführungszeichen. Dadurch wird es zu einem wörtlichen Zeichen und nicht zu etwas, das sich auf magische Weise in Dateinamen erweitert.

Links:Anführungszeichen vs. Asterisk-Dateinamenerweiterung in Bashsowieder Beitrag, auf den Shaun bereits hingewiesen hat.

Sie müssen das Asterisk ohne Anführungszeichen verwenden. Entweder wie im ersten Teil Ihres Skripts oder als Argument fürfind.

Antwort2

Sie könnten dies als Alternative in Betracht ziehen

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

Dadurch werden die betreffenden Dateien effektiv entfernt. Entfernen Sie den Schalter „v“, wenn Sie keine Ausgabe wünschen.

Antwort3

Falls das irgendjemandem da draußen helfen sollte, das hier funktioniert bei mir:

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

verwandte Informationen