¿Es posible tal cosa? Tengo este código que puede hacer lo anterior:
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 limpio, es decir, puede ver que los duplicados de los archivos se nombran <file name> 2.<file extension>
y luego, un segundo después, se nombran como <file name> [date].<file extension>
, lo cual es bastante chocante de ver.
Tengo una solución bash que es limpia (es decir, no discordante), pero usar Finder para copiar archivos tiene algunos beneficios (como barras de progreso, cancelar operaciones de copia, manejo diferente de xattr, 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 implementación, cuando bash duplica los archivos, no ve ningún paso intermedio en el que se cambie el nombre de los archivos. No, cuando se generan los duplicados, sus nombres de archivo ya están finalizados.
Entonces...
((finderSelList)'s (item i)'s name)
, y también eliminar el seguimiento .
cuando se trata de carpetas. Para la solución bash, las salidas fileName y fileExt, especialmente para las carpetas, pueden ser inesperadas y desordenadas.Para su solución AppleScript, puede duplicar en un directorio temporal (preferiblemente en el mismo sistema de archivos), luego cambiarles el nombre al directorio original. Traté de arreglar esto para ti, pero me di por vencido...
Si desea una alternativa, en lugar de bash, puede consultar esta respuesta https://stackoverflow.com/a/275945/1942837 que proporciona (presumiblemente) una buena interfaz gráfica de usuario de python con progreso (no he probado esto).