0 votos

AppleScript para eliminar las tres últimas letras de un nombre de archivo, conservando la extensión

Estoy utilizando un software que produce archivos con el formato

abcdefg#01.wav
abcdefg#02.wav
abcdefg#03.wav

y así sucesivamente.

Me gustaría crear una Acción Rápida en Automator para usarla en Finder y eliminar el #, y todo lo que sigue al #, pero conservando la extensión del archivo.

¿Puede alguien ayudarme?

1 votos

¿Qué pasa con el espacio principal que está mostrando delante de la # carácter, hacer lo que se eliminó también? ¿Qué has probado hasta ahora?

1 votos

He buscado un poco en Google pero no soy, para nadie, un programador. He encontrado un script que elimina los números pero no el #: discussions.apple.com/thread/3366373

0 votos

Además, acabo de comprobarlo y, de hecho, no hay ningún espacio inicial; ¡gracias por hacerme comprobarlo!

1voto

qarma Puntos 71

En un nuevo flujo de trabajo de acción rápida de Automator, querrá establecer las propiedades iniciales para que el flujo de trabajo acepte archivos y carpetas como entrada, y seleccionar Buscador como la aplicación a la que se aplica este flujo de trabajo.

Añade una única acción al flujo de trabajo. Hay dos buenas opciones, y la que elijas depende de ti. Yo recomiendo la Ejecutar Shell script acción por su rapidez y compacidad, pero el Ejecutar AppleScript acción le resultará más fácil adaptarse a otras situaciones en el futuro:

1) Ejecutar Shell script :

  • Si su cáscara preferida es zsh o bash o una de estas opciones está presente en la lista, entonces puede utilizar el código siguiente con los siguientes parámetros seleccionados para la acción:

    Shell: /bin/zsh o /bin/bash
     → Entrada: as arguments

    Compruebe que la ruta de acceso al shell elegido coincide con el shebang ( #!/path/to/shell ) en la primera línea de este script, editándolo como sea necesario:

    #!/bin/zsh
    
    alias rename=echo
    # alias rename='mv -n'
    
    for f in "$@" ; do
         rename "$f" "${f%#*}.${f##*.}"
    done

    Este script es seguro de ejecutar "tal cual", ya que no realizará ninguna operación de archivo todavía. Imprimirá cada ruta de archivo seguida de la ruta propuesta del archivo renombrado en una sola línea, una línea por archivo. Si el resultado se ve bien, puede eliminar el # anterior alias rename='mv -n' después de lo cual, cualquier invocación posterior del script realizará las operaciones de archivo que renombrarán los archivos.


  • Si utiliza FiSH como su shell preferido, selecciónelo de la lista de opciones y aplique los siguientes parámetros a la acción (la ruta a su FiSH puede ser diferente, por ejemplo /usr/local/bin/fish ):

    Shell: /usr/bin/fish
     → Entrada: as arguments

    Editar el shebang de la primera línea para reflejar la ruta real de FiSH :

    #!/usr/bin/fish
    
    function mv
         echo $argv \n
    end
    
    for filepath in $argv
        mv -n "$filepath" ( string replace -r \
                            -- '(?x) \# [0-9]+ 
                                (?=\.[^.]+$)' \
                               '' "$filepath" )
    end

    Esto es seguro para ejecutar "tal cual", y sólo imprimirá el renombramiento propuesto junto a la ruta de archivo original, uno por línea para cada archivo. Si se ve bien, puede eliminar la declaración de la función, es decir, estas tres líneas:

    function mv
         echo $argv \n
    end

    después de lo cual, cualquier invocación posterior del script actuará sobre los archivos y los renombrará en consecuencia.

2) Ejecute AppleScript:

  • Reemplace cualquier código de muestra que esté presente en el panel de edición, y sustitúyalo por lo siguiente:

    property text item delimiters : "#"
    
    on run {filepaths}
        tell application id "com.apple.systemevents"
            repeat with filepath in the filepaths
                tell the item named filepath
                    set {filename, extension} to its {name, name extension}
                    tell the extension to if its length > 0 ¬
                        then set the extension to "." & it
    
                    if "#" is in the filename then set its name to ¬
                        "" & (the filename's text items 1 thru -2) ¬
                        & the extension
                 end tell
            end repeat
        end tell
    end run

    Recomiendo probar esto en algunos archivos ficticios inicialmente para asegurarse de que hace lo que esperaba. No tengo los medios para probar este código, lo que normalmente haría, aunque incluso si lo tuviera, siempre es aconsejable probar cualquier código que no hayas escrito tú mismo de antemano.

-1voto

SiliconChaos Puntos 73

AppleScript:

set input to "atttttttbcde#09.wav"
set output to (do shell script "myVar=\"" & input & "\" && basenameVar=\"${myVar%#*}\" && echo \"$basenameVar.${myVar##*.}\" ")

Shell script (debe usar Args en Automator para rellenar var)

myVar=(Enter Shell arg here) && basenameVar="${myVar%#*}" && echo "$basenameVar.${myVar##*.}"

Funciona bien. No sólo elimina los números de 2 dígitos y el #, sino que también elimina todos los caracteres después del # y luego vuelve a añadir la extensión (que almacenó en una var anteriormente).

He aquí una explicación más profunda:

  1. Almacena el nombre del archivo original como Var en ZSH
  2. Elimina todo lo que sigue a # del nombre original
  3. Añade la extensión de la espalda, que se encuentra desde el nombre original
  4. Hace eco del nombre final, que se almacena en la variable de salida en applescript

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