Transfiero muchos datos a mi mac mediante tarjetas SD de equipos de vídeo y audio. Las tarjetas SD se montan como discos (o volúmenes, como quieras llamarlos) y se muestran en el Escritorio. Después de la carga necesito una manera de vaciar la papelera en las tarjetas SD individuales sin vaciar la papelera en todos los discos así que usé script editor para crear la siguiente aplicación y lo guardó en el escritorio como una aplicación. Esto fue creado hace años y funcionó perfectamente.
on open dropped_item
tell application "Finder"
-- get path to drive.
set drivepath to POSIX path of dropped_item
end tell
if drivepath is "/" then
display dialog "not allowed on the boot volume. Exiting"
else
set trashpath to drivepath & ".Trashes"
set confirm to display dialog ¬
"Empty the trash on " & drivepath & ¬
"?" buttons {"No", "Yes"} default button "No"
if button returned of confirm is "Yes" then
do shell script "rm -rf " & trashpath
end if
end if
end open
Actualicé a Ventura hace unos meses y la aplicación parecía funcionar porque no había mensajes de error, pero hace poco descubrí que no borraba la papelera. Le di a la aplicación, script Editor y Terminal permiso de acceso total al disco y esto no ayudó. De hecho, cuando ejecuté la aplicación, el sistema revocó el acceso total al disco para la aplicación.
Cuando probé algunas ediciones de diagnóstico y las guardé, empecé a recibir mensajes de error (descritos a continuación). Parece que scripts compilados por Monterey no comprobaban este error.
He reducido el script a lo siguiente que demuestra root del problema:
La siguiente línea se introduce en el editor script, se compila y se guarda como aplicación:
do shell script "rm -rf "/Volumes/SD_CARD_NAME/.Trashes"
Se da permiso de acceso total al disco a script Editor, la app y Terminal.
Si ejecuto el script desde el editor script, se elimina .Trashes
Si introduzco "rm -rf /Volumes/SD_CARD_NAME/.Trashes" en la línea de comandos del Terminal, se elimina .Trashes
Si ejecuto la aplicación haciendo clic en el icono de la aplicación, .Trashes no se elimina y obtengo el siguiente error:
rm:/Volúmenes/SD_CARD_NAME/.Trashes: Operación no permitida (1)
y el Acceso a Disco Completo para la aplicación está desactivado.
He probado varias formas de solucionar este problema, entre ellas la siguiente:
tell application "Finder" delete folder "/Volumes/SD_CARD_NAME/.Trashes"
tell application "System Events" delete folder "/Volumes/SD_CARD_NAME/.Trashes"
Y crear un shell script, guardarlo como ejecutable en ~/bin, darle permiso de Acceso Total al Disco y llamarlo desde el applescript. En este caso, FDA fue revocado para la app pero no para el shell script en ~/bin.
Ninguna de ellas resolvió el problema.
Lo considero un error por varios motivos:
- Apple no debería imposibilitar el vaciado de la basura en un solo volumen. Qué cosa horrible va a pasar si quito la papelera en una tarjeta SD?
- El comportamiento es incoherente entre ejecutar la aplicación desde el editor script y ejecutarla pulsando sobre ella.
- El sistema no debería revocar la FDA sin mostrar al menos un mensaje de error que me indique por qué y qué tengo que hacer para evitar la revocación.
He presentado un informe de error, aunque no espero que Apple solucione el problema.
Ha habido varias sugerencias en los comentarios (gracias a todos los que han intentado ayudar), pero he optado por una solución sencilla que se describe en mi "respuesta".
gracias de nuevo a todos.