1 votos

¿Cómo borro .Trashes usando una aplicación applescript, problema con el permiso de Acceso Completo al Disco?

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:

  1. 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?
  2. El comportamiento es incoherente entre ejecutar la aplicación desde el editor script y ejecutarla pulsando sobre ella.
  3. 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.

1voto

dottore Puntos 21

Esta es la solución más sencilla que he encontrado.

  1. Cree el siguiente shell ejecutable script:

    cd ~/bin
    cat "rm -rf .Trashes" > rmtrash
    chmod +x rmtrash
  2. Dar permiso de acceso total al disco a Terminal y a rmtrash

    System Settings->Privacy & Security->Full Disk Access
    Enable Terminal
    click + (at bottom of screen)
    search for rmtrash and add it
    enable rmtrash

Para vaciar la papelera de una tarjeta SD (o de cualquier volumen)

right click on the volume
Select New Terminal at Folder
type rmtrash

Nota, si tienes un sistema multiusuario podrías obtener el UID y añadirlo al comando rm, pero en mi caso el sistema es monousuario y sólo uso esto en tarjetas SD, así que lo mantengo simple.

He solicitado a Apple que añada un comando de "vaciar la papelera en un volumen", pero tengo pocas esperanzas de verlo algún día.

PS. Probé el rmtrash script en una partición del disco interno y me salió "permiso denegado". Pude borrar manualmente las papeleras pero tuve que usar sudo para hacerlo. La protección de Apple para el disco interno es mayor, incluso las particiones de ese disco que no son realmente el volumen de arranque. Creo que es una buena decisión por parte de Apple.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X