0 votos

Problemas para cambiar el nombre de los archivos que se mueven de una carpeta nueva a una antigua mediante Applescript

Ok así que esto es un complejo script que espero que alguien por ahí me puede ayudar con porque he pasado todo el día tratando de averiguar esto.

Digamos que colecciono imágenes de gatos de Instagram y tengo muchas carpetas de diferentes gatos en mi ordenador. Identifico cada una de ellas añadiendo un comentario en la sección "obtener información" de MacOS de cada carpeta con el nombre de la cuenta de Instagram de cada gato. Por ejemplo: @juniorcat

Utilizo Hazel (noodlesoft.com) para ordenar mis carpetas automáticamente, pero no sabe cómo combinar el contenido de las nueva carpeta con el carpeta antigua . Así que tengo que hacer un Applescript incrustado.

Este script que armé es una combinación de muchos otros que encontré en Internet y hace lo siguiente:

  1. Busca en el directorio principal del nueva carpeta para ver si hay hay una carpeta antigua con el mismo comentario "get info" de @juniorcat que existe. Lo hace buscando todas las carpetas de ese directorio que no han se ha añadido hoy.

  2. Si hay un carpeta antigua que sí tiene @juniorcat en la sección de comentarios "get info", entonces el script moverá todas las imágenes de la sección nueva carpeta a la carpeta antigua .

  3. El script cambiará secuencialmente el nombre de todas las imágenes que se han se han movido al carpeta antigua con el nombre de esa carpeta y con el número más bajo disponible. Por ejemplo: Junior the Cat 5.jpg, Junior the Cat 6.jpg, etc.

Tengo la 1 y la 2 funcionando correctamente, pero estoy teniendo problemas para conseguir que el script renombre SOLO los archivos que muevo al carpeta antigua y no todo el contenido de esa carpeta.

Siempre que lo intento me sale el siguiente error:

error "No se puede obtener el nombre de "/Users/david/Desktop/Gatos hermosos/Junior el Gato/prueba7.jpg"." número -1728 del nombre de "/Users/david/Desktop/Gatos hermosos/Junior el Gato/prueba7.jpg"

Aquí está el script:

set theFile to ":Users:david:Desktop:Beautiful Cats:Junior the Cat-1" as alias
--This is the Hazel matched folder that is renamed with a  "-1" at the end because a duplicate name exist.

set inputAttributes to "@juniorcat"
--The comment I add to identify the Instagram Account of each folder.

--Embedded Hazel Script starts here

set parentFolder to POSIX file (do shell script "dirname " & quoted form of POSIX path of (theFile))
set parentPath to quoted form of POSIX path of parentFolder
set spotlight1 to "mdfind -onlyin " & parentPath & " 'kMDItemDateAdded <= $time.today && kMDItemContentType == public.folder && kMDItemFinderComment ==  " & inputAttributes & "'"
set oldFolder to (do shell script spotlight1)

-- The above shell script is a spotlight search of folders that contain the same comment and have NOT been added today. This is to get the old existing folder.

-- Move Files Script

if (oldFolder = "") then
else
    set targetFolder to (POSIX file oldFolder) as alias

    tell application "Finder"
        move (entire contents of theFile) to the targetFolder
    end tell

    -- Select the Images added

    set targetPosix to quoted form of POSIX path of targetFolder

    set command2 to "mdfind -onlyin " & targetPosix & " 'kMDItemDateAdded >= $time.today && kMDItemKind = *image'"
    set movedImages to paragraphs of (do shell script command2)

    --Rename all the images selected from the above shell script

    set text item delimiters to "."
    tell application "Finder"
        set all_files to every item of movedImages

        -- If you replace "movedImages" with "targetFolder", it will name all of the files in that folder. I only want to rename the files I move into this folder.

        set new_name to name of folder targetFolder
        repeat with index from 1 to the count of all_files
            set this_file to item index of all_files
            set {itemName, itemExtension} to {name, name extension} of this_file
            if index is less than 10 then
                set index_prefix to " "
            else
                set index_prefix to " "
            end if
            if itemExtension is "" then
                set file_extension to ""
            else
                set file_extension to "." & itemExtension
            end if
            set the name of this_file to new_name & index_prefix & index & file_extension as string
        end repeat
    end tell
end if

0voto

red_menace Puntos 111

Algunas cosas sobre tu script:

  • Mueve todo desde la carpeta de origen y luego busca de nuevo para encontrar elementos para renombrar;
  • Simplemente coge todos los elementos y los renombra con un sufijo sin mirar lo que ya hay;
  • No estoy seguro de usar el término reservado index como nombre de variable.

He añadido un manejador para obtener un nombre para los elementos en la carpeta de destino. Añade un sufijo numérico a la parte del nombre y comprueba con lo que ya hay, continuando hasta que el nombre es único. También he consolidado las partes de mover y renombrar y he dado nombres más descriptivos a las variables (para que sea más fácil trabajar con ellas), así que si mis términos de búsqueda de prueba no estaban muy alejados, esto debería acercarse a lo que estás buscando:

set sourceFolder to (((path to desktop folder) as text) & "Beautiful Cats:Junior the Cat-1") as alias
set inputAttributes to "@juniorcat"

# Find an existing folder to add to
tell application "Finder" to set parentFolder to quoted form of POSIX path of ((container of sourceFolder) as text)
set spotlight1 to "mdfind -onlyin " & parentFolder & " 'kMDItemDateAdded <= $time.today && kMDItemContentType == public.folder && kMDItemFinderComment ==  " & inputAttributes & "'"
set destinationFolder to (do shell script spotlight1)

if destinationFolder is not "" then
    # Get a list of added items from sourceFolder
    set spotlight2 to "mdfind -onlyin " & quoted form of POSIX path of sourceFolder & " 'kMDItemDateAdded >= $time.today && kMDItemKind = *image'"
    set movedImages to paragraphs of (do shell script spotlight2)

    # Move and rename the items selected from the above shell script
    tell application "Finder"
        set destinationFolder to destinationFolder as POSIX file as alias -- coerce from POSIX
        set baseName to name of destinationFolder
        repeat with anItem in movedImages
            set anItem to anItem as POSIX file as alias -- coerce from POSIX
            set theExtension to name extension of anItem
            if theExtension is not "" then set theExtension to "." & theExtension
            set movedFile to (move anItem to destinationFolder) -- get a reference to the moved file
            set newName to my (getUniqueName for baseName & theExtension from destinationFolder)
            set name of movedFile to newName
        end repeat
    end tell
end if

# Check someName against items in someFolder, adding a suffix as needed to get a unique name
to getUniqueName for someName from someFolder
    set {separator, counter} to {" ", 0} -- starting suffix, or 0 to always add a suffix starting at 1
    set leadingZeros to 0 -- maximum leading zeros (1-6), or 0 for none

    set here to -(offset of "." in ((reverse of text items of someName) as text)) - 1 -- split extension at last period
    set theName to text 1 thru here of someName
    if here is -1 then -- no extension
        set theExtension to ""
    else
        set theExtension to text (here + 1) thru -1 of someName
    end if

    if counter < 1 then
        set counter to 1
        if leadingZeros > 0 then set counter to text -(leadingZeros + 1) thru -1 of ("000000" & counter)
        set newName to theName & separator & counter & theExtension
    else
        set newName to theName & theExtension
    end if
    tell application "System Events" to tell (get name of items of folder (someFolder as text) whose visible is true)
        repeat while it contains newName
            set counter to counter + 1
            if leadingZeros > 0 then set counter to text -(leadingZeros + 1) thru -1 of ("000000" & counter)
            set newName to theName & separator & counter & theExtension
        end repeat
    end tell

    return newName
end getUniqueName

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