Nido Apple

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Hola, buenos días.

He modificado un script encontrado que invierte la selección de archivos que encuentra en el Finder.

Su funcionamiento es satisfactorio; sin embargo, cuando trabaja con gran cantidad de archivos (varios miles de archivos de imagen), tras estar procesando los archivos unos 15 -17 segundos se produce el siguiente error:

_error “Finder ha detectado un error: El gestor no acepta objetos de esta clase”. number -10010 from application “Finder” to class «furl»_

Imagino que la propia duración de la ejecución será el motivo del error.

tell application "Finder"
    set listaDefinitiva to {} -- Crea una lista vacía donde figurarán los archivos que serán seleccionados definitivamente 
    set totalidadArchivos to items of window 1 as alias list -- Crea lista de alias con todos los archivos de la carpeta
    set itemSeleccionados to the selection as alias list -- Crea una lista con los archivos seleccionados previamente
    repeat with i in totalidadArchivos -- inicia un blucle secuencial con todos los archivos de la carpeta
        if i is not in itemSeleccionados then -- si el archivo no está en la lista de seleccionados...
            set end of listaDefinitiva to i -- Envía el archivo al final de la lista definitiva
        end if
    end repeat
    select listaDefinitiva -- Selecciona la listaDefinitiva construida  
end tell

La ejecución queda interrumpida (sólo al manejar grandes cantidades de archivos) en la línea:

select listaDefinitiva -- Selecciona la listaDefinitiva construida  

Me pregunto por algún planteamiento distinto que pueda esquivar el problema.

Agradecimientos de antemano.

Salud.

0voto

Peter comentado

¿Qué tipos de archivos son? ¿No hay algún archivo raro o aplicación en esa lista?

invierte la selección de archivos que encuentra en el Finder

¿Eso significa que tu seleccionas un archivo y el script selecciona los otros que no están seleccionados?

¿Para qué intentas hacer eso? ¿O qué es lo que intentas hacer?

Saludos.

1voto

DJUNQUERA comentado

Hola, Peter.

Gracias por tu disposición a compartir tu tiempo y tus conocimientos.

Sí, exactamente. Tú tienes hecha una selección en una carpeta y el script se encarga de invertir la selección (los seleccionados dejan de estarlo y los no seleccionados inicialmente se convierten en seleccionados).
Son todos archivos de imagen, casi todos jpg.

Se trata de un recurso que Windows lo tiene a mano desde siempre.
La utilidad es evidente: es fácil agrupar (seleccionar) unos archivos en los NO estamos interesados y que tienen una característica común (por ejemplo, comenzar con un número) para invertir la selección y, de esta manera, seleccionar los que SÍ tenemos interés.

El script funciona muy bien, pero cuando se trata de varios miles de archivos quiero comprender que hacer una lista añadiéndolos secuencialmente a la cola de una lista conlleva un tiempo exagerado y que, tal vez, sea ese el motivo del error.
Por eso me preguntaba un planteamiento distinto para invertir la selección de archivos.

Confío haber sabido exponer el asunto.

Gracias de nuevo.

Salud.

1voto

Peter comentado

¿Te funcionó el ejemplo en mi respuesta?

0voto

DJUNQUERA comentado

Hola, Peter.

Desgraciadamente no ha funcionado cuando manejo un número elevado de archivos.
Tras varios segundos se produce el siguiente error:

error "No es posible convertir «class alia» \"\" of application \"Finder\" en tipo alias." number -1700 from «class alia» "" to alias

Es curioso ese «class alia» (sin la "s" final).

Si se manejan unos pocos cientos de archivos, dependiendo del momento, no suele haber problemas.

Pensé que se podía tratar del "tiempo" que se invierte en fabricar la lista para más tarde realizar la inversión.
Sin embargo, me he planteado que tal vez no se trate de "tiempo", sino más bien de "memoria" (un desbordamiento de memoria). No lo sé; (tengo un iMac i7 con procesador a 4 GHz y una memoria de 32 GB, que suele estar libre entre un 50% - 25%).

Respecto a otro script (ordenar escalonadamente las ventanas del Finder...) he añadido en la primera línea

tell application "Finder" to activate

produciéndose el siguiente error:

error "Finder ha detectado un error: No puede obtenerse alias file \"\"." number -1728 from alias file ""

También he probado reemplazar la primera vez que aparece la declaración

tell application "Finder"

y la he sustituido por

tell application "Finder" to activate

y se ha producido un error de compilación en la línea

-- Sort the folders by name
set theFolders to sort theFolders by name

Muchas gracias por intentar echarme una mano usando de tu tiempo y tus conocimientos.

Salud :-)

1 Respuesta

0voto

Peter Puntos282690

Ok, ahora entiendo lo que quieres hacer, aunque no entiendo la funcionalidad, sí ya los tienes por numero con solo ordenarlos de esa forma podrías seleccionar lo necesario y meterlo a una carpeta con un click.

Prueba con este AppleScript.

tell application "Finder"
    set {theSelection, selectedCount} to {get selection, count (get selection)}

    if selectedCount is 0 then return
    if selectedCount is 1 then set theSelection to theSelection as list
    set allFiles to (items of (insertion location as alias))

    set inverselist to {}

    repeat with theItem in allFiles
        if {contents of theItem} is not in theSelection then
            set end of inverselist to theItem
        end if
    end repeat
    set the selection to the inverselist
end tell

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...