Cómo activar un script después de duplicar/copiar un directorio en Mac OSX/Buscador

StackOverflow https://stackoverflow.com/questions/2028220

  •  19-09-2019
  •  | 
  •  

Pregunta

En Snow Leopard, quiero activar un script/código cada vez que un usuario duplicados de un directorio en el Finder.¿Cómo puedo hacer eso?

He estado buscando en todo el docs, pero soy un poco nuevo en este tipo de trabajo para reconocer el enfoque correcto.

La motivación:Si un directorio está bajo el control de versiones, dicen que con git o hg o svn, y el usuario duplicados que dir, entonces quiero ejecutar un script que busca el original de directorios y, a continuación, hace una "etiqueta" en el control de versiones.Si el usuario cambia el nombre de la dir, dicen que dentro de 10 segundos, a continuación, cambiar el nombre de la que sería la parte de la etiqueta de comentario.Me gustaría eventualmente como para tirar en algunos superposición de iconos para indicar la versión de control de estado de la dir, demasiado.

Ampliado Motivación:El problema que enfrentamos es que el software de control de versiones como git, y hg, en mi opinión es demasiado complicado, en particular porque es demasiado desconectado de los archivos del sistema y actúa como una especie de sombra-sistema de ficheros.Soy un gran fan de control de la versión y la han utilizado por muchos años -, pero también he visto a los límites de la implementación, debido a su complejidad.La realidad es que mucho más código estaría bajo el control de versiones si que eran más fáciles de utilizar.

Estoy investigando la viabilidad de la creación de un fácil de usar VCS sistema que no requiere de acceso a la terminal.Imaginar lo que el control de versión (por código) se vería como si Apple fueron a hacer parte de finder y/o iLife - simple, pero suficientes.En realidad, estoy, obviamente, no va a volver a inventar una vcs, pero tengo la esperanza de que la construcción de un módulo/plugin para algo como hg, y el acoplamiento que con una nueva concepción de cómo vcs trabaja para un buscador centrado en el interfaz de usuario de un todo para crear un simple, pero lo suficientemente bueno, VCS para los más casual programador.

El primer obstáculo técnico detección de directorio de copias y cambia el nombre - y por lo tanto esta pregunta.

Número de Archivos: Puesto que la principal motivación de este proyecto es para la versión de código fuente de control, sólo tengo que coincidir con el número de directorios que coincide con el número de proyectos que se están trabajando.Por lo tanto, si usted está trabajando en dos proyectos distintos, entonces, creo, que solo necesito la pista de dos directorios - la raíz de cada proyecto.Ahora, estoy totalmente de admitir que yo pueda, en este momento mis-caracterización de la necesidad, así que tal vez necesito para el seguimiento de todos los directorios en los proyectos, o tal vez incluso todos los archivos en los proyectos, demasiado, por lo que permite decir, por el bien del argumento, que normalmente proyecto tiene 1.000 archivos en ella.Así que, básicamente, tal vez sólo un par de directorios, o un par de cientos de directorios, o tal vez un par de miles de archivos.Es Importante Destacar Que, Me creo De 50.000 archivos estaría en el extremo superior del espectro.

Usuario duplica la dir 'tronco' dentro del finder

tronco --> tronco copia

Si el usuario cambia el nombre de 'tronco copia' a 'tronco copia fijo #255 por colores". el tronco dir (no la copia) serían etiquetados con el comentario fijo '#255 por colores".

Referencias:

  • Sistema De Archivos, Programación De Eventos

    • Recibir notificaciones, en el arranque, si algo en un registrada dir cambiado - si cualquier archivo en una gran dir cambios.No se decirte, no creo, lo que fue cambiado.
  • Núcleo Colas

    • Usted puede registrarse para ser notificado de las cosas en el nivel de archivos individuales.Estás opciones son (al menos) los siguientes:NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_LINK | NOTE_RENAME | NOTE_REVOKE Esto tal vez podría ser utilizado para detectar un directorio de cambiar el nombre (va a trabajar para dirs?), pero al parecer no es un dir copia.

Ligeramente pregunta relacionada con la:

Gracias, JJ

¿Fue útil?

Solución

El post original sugiere un gran proyecto, con un montón de sin especificar características.Su 'ampliado de la motivación" acabar con el '...la detección de directorio de copias y cambia el nombre de ...' ha sido útil.

En primer lugar, que bastante respondió a su propio post con las referencias al Archivo de los Eventos del Sistema y el Kernel de Colas.Ustedes estaban en lo correcto para descartar Acciones de Carpeta, pero por la razón equivocada.Le parecía preocupado con la activación de FAs para un gran número de carpetas.Que no es un problema, porque puede ser automatizado.La razón por la FAs no funciona es que no puede detectar un archivo cambiar el nombre.También, hay un gran problema con la sobrecarga y la concurrencia debido a que las acciones son de AppleScript.

Y estaba en lo cierto acerca de FS Eventos:(a partir de Darwin Docs)

El punto importante es la que el detalle de las notificaciones está en un nivel de directorio.Lo que te dice sólo que algo en el directorio ha cambiado, pero no se decirte lo que ha cambiado.

Por lo que parece que están a la izquierda con el Kernel de Colas.Ellos lo hacen todo.Tenga en cuenta que tendrá que ser inteligente para usar el Kernel de Colas - tienes que saber el nombre de una nombres de archivo para su seguimiento.Así como los nuevos archivos/carpetas se crean, se han de interpretar los acontecimientos, y abierto (O_EVTONLY) los nuevos archivos.Sin embargo, hay un problema:(más Darwin Docs)

Si usted está controlando un gran jerarquía de contenido, usted debe utilizar archivo de eventos del sistema en su lugar, sin embargo, porque núcleo de las colas de algo más complejo que el kernel de eventos, y puede ser más intensivo en recursos, porque el usuario adicionales-kernel comunicación involucrados.

Otra respuesta había mencionado que TimeMachine usado FS Eventos.Dudo que debido a la tomó nota "de granularidad gruesa'.Sospecho que hay un gancho especial en el núcleo de 'cerrar' archivo de código.Al menos, eso es lo que parece que usted necesita si usted desea supervisar muchos archivos.Cuántos estás considerando?

Otros consejos

Suena como sistema de archivos de eventos es lo que quieres.Tal vez usted está huyendo de ella porque parece complicado, pero creo que lo que estamos tratando de hacer es complicado en general.

Centro de atención y el Tiempo de uso de la Máquina sistema de archivos de eventos con el fin de determinar qué ha cambiado en el sistema de archivos y por lo tanto qué archivos deben ser indexados o copia de seguridad.Su requisito es similar, sólo que en lugar de hacer copias de seguridad, desea comprobar si la actualización de los directorios existentes en el control de código fuente, y si no, determinar si algo (ya sea de los nuevos directorios o una etiqueta o lo que sea) debe ser añadido al control de código fuente.

Probablemente, hay una manera de hacer esto solo en el Buscador, pero es probable que usted también quiere saber si el usuario copia un directorio desde la línea de comandos o desde algún otro programa.

Podría entrar en más detalles acerca de su motivación para esta función?Suena como que usted está tratando de habilitar a los usuarios para "usar" control de código fuente sin necesidad de tener que aprender a usarlo."Sólo tienes que copiar el directorio y el código de integración se hará cargo de todo." Pero creo que tendremos problemas tratando de hacer interpretar muy general del sistema de ficheros cambios implícita de control de código fuente comandos.

Si lo que quieres es activar esta secuencia de comandos en algunas carpetas, entonces usted debe usar lo que Apple llama "Carpeta de la Acción" puede adjuntar a cualquier carpeta como una manzana de secuencia de comandos.

Yo no sé cuál es la exacta incluso el Buscador de gatillo, pero si yo tuviera mi mac con el que me conocen me gustaría abrir automater y busque en la sección "Archivos y Carpetas" estoy 100% usted se encuentra en un evento de duplicación o copia allí.

no hay "duplicados" y "cambiar de nombre" eventos desde el finder/sistema de automator secuencias de comandos, por lo que exactamente lo que usted está pidiendo requiere el uso de sistema de ficheros eventos (que yo no voy a entrar en a), pero la rápida applescript

  • las capturas de todos los elementos agregó a la carpeta (incluyendo aquellos añadidos por duplicación)
  • pide al usuario que proporcione un nombre de etiqueta
  • se ejecuta un script en bash con esta info

que debería permitir a usted para construir una buena solución

  1. lugar additem.scpt en /Library/Scripts/Carpeta de secuencias de comandos de Acción
  2. fixup.sh en la carpeta que contiene el tronco (o ajustar y poner donde quieras)
  3. en la carpeta que lo contiene, haga clic derecho y seleccione "Carpeta Action Setup..."
  4. conectar a la carpeta con el nuevo script
  5. editar fixup.sh para satisfacer sus necesidades

additem.scpt

on adding folder items to this_folder after receiving added_items
        try
                tell application "Finder"
                        set the folder_name to the name of this_folder
                end tell

                set the item_count to the number of items in the added_items

                repeat with an_added_item in added_items
                        tell application "Finder"
                                set item_name to name of an_added_item
                        end tell

                        set new_name to text returned of (display dialog "Please enter tag name " default answer item_name buttons {"Continue…"} default button 1)

                        set the scriptcode to "\"" & POSIX path of this_folder & "fixup.sh\" \"" & POSIX path of an_added_item & "\" \"" & new_name & "\""
                        display dialog scriptcode
                        do shell script scriptcode
                end repeat
        end try
end adding folder items to

fixup.sh

#!/bin/bash

if [ -d "$1" ]
then
  echo asked to fixup \"$1\" >> /tmp/fixup.log
fi
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top