Wer kennt es nicht?
Man möchte eine Datei in den Papierkorb verschieben – und bekommt eine Fehlermeldung, die darauf hinweist, dass – wenn man weiter macht – die betreffende Datei sofort gelöscht wird.
Wo ist der Papierkorb? Und warum funktioniert er nicht?
Gestern ging’s doch noch!
Zunächst wird man im Stammverzeichnis der Macintosh HD nach dem geschützten Systemordner „.Trashes“suchen müssen.
Ist der vorhanden, kann man aufatmen – hier geht’s weiter:
Konstruktionsbedingt ist der „Papierkorb“ ein Unterverzeichnis, das im Benutzerverzeichnis beim Anmelden des Benutzers angelegt wird. Wenn man sich auch versteckte Dateien anzeigen lässt, sollte im Normalfall im Benutzerverzeichnis ein Ordner mit angezeigtem Namen „Papierkorb“ existieren.
Wenn nicht, wird dieses angelegt, sobald man eine Datei in den Papierkorb verschieben möchte. Klickt man auf „Informationen“ erfährt man, dass dieses Verzeichnis nur für den Benutzer als „Papierkorb“ angezeigt wird, der interne, wahre Name lautet: .Trash. Mit einem Punkt vorn ist es als „versteckt“ gekennzeichnet.
Soweit, so gut.
Manchmal aber – und ich kann nicht herausfinden, wieso – wird statt des Verzeichnisses eine Datei angelegt. Diese heißt auch .Trash.
Und das ist dann der Grund, warum es nicht gelingt, Dateien im Papierkorb zwischenzulagern, bis man sie endgültig löschen möchte.
Die Datei .Trash zeigt sich da als störrisch.
Lösung des Problems: nachschauen, ob .Trash ein Verzeichnis oder eine Datei ist – Datei löschen, Papierkorb funktioniert wieder.
Das schreit geradezu nach einer Automatisierung – beispielsweise einer Apple-Script-Aktion.
Also etwa so:
try set theFile to "~/.Trash" set msg to "Keine Datei ~/.Trash" tell application "System Events" if exists file theFile then do shell script "rm '~/.Trash'" say "Der Fehler ist behoben" end if end tell # sollte das Verzeichnis Papierkorb existieren, käme eine kryptische Fehlermeldung, die wir hier abfangen display dialog msg on error say "mit dem Papierkorb kannst Du arbeiten" end try
Ich kann euch aber beruhigen: selbst, wenn man alles schön zusammen klickt, funktioniert es doch nicht immer zuverlässig. Speziell, wenn man es bei der Benutzeranmeldung als „Anmeldeobjekt“ ausführen lässt, wird das Apple-Script enttäuschen.
Warum also nicht mal ein Shellscript verwenden? Zumal das Löschen der störrischen Datei auch unter Apple-Script nur funktioniert, wenn man „rm“ in der Anweisung „do shell script“ bemüht.
#! /bin/zsh # erstmal das Datum und die Uhrzeit in eine Variable, auf die später zurückgegriffen werden kann d=$(date +%d.%m.%Y\ %H:%M) # erste Abfrage: ist Trash ein Verzeichnis? # wenn ja, schreib Datum und Uhrzeit und die Ansage in die Log-Datei if [ -d ~/.Trash ] ; then echo $d 'Der Papierkorb scheint funktionstüchtig' | tee -a checkTrash.log # zweite Abfrage, wenn erste negativ: ist Trash eine Datei? # wenn ja, schreib Datum, Uhrzeit und Ansage in die Log-Datei und lösche Trash elif [ -f ~/.Trash ] ; then echo $d '.Trash ist eine Datei und wird gelöscht!' | tee -a checkTrash.log && rm -f ~/.Trash # wenn Trash weder als Datei noch Verzeichnis vorhanden, wundere dich und # schreib Datum und Uhrzeit und Meldung in die Log-Datei else echo $d 'Kein .Trash weit und breit' | tee -a checkTrash.log fi exit
So.
Unter einprägsamem Namen („irgendwas“.sh – das sh deutet schon an, dass es ein Shellscript sei) abgespeichert, anschließend ausführbar machen (chmod u+x irgendwas.sh) und in der Systemsteuerung unter Benutzer&Gruppen – Anmeldeobjekte registrieren und dann sollte es seine Arbeit jedes mal bei Benutzeranmeldung tun.
Wenn man im Terminal unter Einstellungen – Profile – Shell die Option „Shell“ „schließen, wenn kein Fehler aufgetreten ist“ ausgewählt hat, wird man beim Anmelden einmal die Shell kurz aufblitzen sehen und dann nicht weiter damit belästigt. Man kann gelegentlich in die Logdatei schauen und sich freuen, wie oft das Shellscript dem Papierkorb auf die Beine geholfen hat….
Alternativ könnte das Shellscript auch so aussehen:
#!/bin/zsh #Variable Datum und Uhrzeit erzeugen d=$(date +%d.%m.%Y\ %H:%M) for datei in ~/.Trash do [ -f $datei ] && echo $d "$datei: ist eine reguläre Datei und wird gelöscht" | tee -a checkTrash.log && rm -f ~/.Trash [ -d $datei ] && echo $d "$datei: ist ein Verzeichnis - der Papierkorb funktioniert" | tee -a checkTrash.log [ ! -e $datei ] && echo $d "$datei: existiert nicht!" | tee -a checkTrash.log done