5 votos

¿Duplicar y renombrar selección del buscador en la misma carpeta en un solo paso limpia?

Es tal cosa posible? Tengo este código que se puede hacer al respecto:

set now to do shell script "date +%Y-%m-%d' '%H.%M.%S"
tell application "Finder"
    set finderSelList to selection as alias list
    try
        set fileDir to parent of first item of finderSelList as alias
    on error
        return "No selection"
    end try

    set dupeList to (duplicate finderSelList to fileDir) as list

    repeat with i from 1 to (count of dupeList)
        set ((dupeList)'s (item i)'s name) to ((finderSelList)'s (item i)'s name) & " [" & now & "]." & ((finderSelList)'s (item i)'s name extension)
    end repeat
end tell

return dupeList

Sin embargo, no es tan limpia que es, se puede ver que los archivos duplicados son nombrados <file name> 2.<file extension>, y un segundo despues se pone nombre a <file name> [date].<file extension>, que es bastante chocante ver.

Tengo un bash solución que está limpio (es decir no discordante), pero usando el Buscador de copia de archivos tiene algunas ventajas (como las barras de progreso, la cancelación de las operaciones de copia, diferentes xattr manipulación, etc.):

finderSelection=$(osascript getfinderselection.scpt)

now=$(date +%Y-%m-%d' '%H.%M.%S)

if [ "$finderSelection" ]
    then
    echo "$finderSelection" |
    while IFS= read -r file
    do
        fileDir=$(dirname "$file")
        fileBaseN=$(basename "$file")
        fileName="${fileBaseN%.*}"
        fileExt="${fileBaseN##*.}"

        cp -r "$file" "$fileDir/[$now] $fileName.$fileExt"
    done

    afplay "/System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds/system/Volume Mount.aif"

fi

...y getfinderselection.scpt contiene:

tell application "Finder"
    set finderSelList to selection as alias list
end tell

if finderSelList ≠ {} then
    repeat with i in finderSelList
        set contents of i to POSIX path of (contents of i)
    end repeat

    set AppleScript's text item delimiters to linefeed
    finderSelList as text
end if

En esta aplicación, cuando bash duplicados de los archivos, no se ve ningún paso intermedio en el cual los archivos se cambia el nombre. No-cuando los duplicados de spawn, los nombres de los archivos ya están finalizados.

Así que...

  • Hay una manera de implementar la idea en AppleScript, pero no la tienen tan chocante y mucho más suave, como la forma de bash no?
  • En primer lugar, se deben ejecutar con el AppleScript de la solución o de la fiesta?
  • ¿De qué otra manera puede la solución preferida ser mejor? Para el AppleScript solución, necesito encontrar una manera de eliminar la extensión del archivo de ((finderSelList)'s (item i)'s name), y también eliminar el trailing . cuando se trata con carpetas. Para la fiesta de la solución, el nombre del archivo y extarchivo salidas, especialmente para las carpetas, puede ser inesperado y desordenado.

1voto

oystein Puntos 11

Para su solución de applescript, podría duplicar a un directorio temporal (preferiblemente en el mismo sistema de archivo), luego cambiar hacia el directorio original. Intenté hackear esto juntos para usted pero dio para arriba...

Si quieres una alternativa, en lugar de bash puede parecer en esta respuesta http://stackoverflow.com/a/275945/1942837 que proporciona un python (presumiblemente) agradable gui con progreso (no he probado esto).

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