¿Es tal cosa posible? 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 está tan limpio, es decir, puedes ver que los duplicados de los archivos se llaman <file name> 2.<file extension>
, y luego un segundo más tarde recibe el nombre de <file name> [date].<file extension>
, lo cual es bastante sorprendente.
Tengo una solución bash que está limpia (es decir, no discordante), pero usar el Finder para copiar archivos tiene algunos beneficios (como barras de progreso, cancelación de 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 ...
- ¿Hay alguna forma de implementar la idea en AppleScript pero no es tan arrolladora y mucho más sencilla, como la de bash?
- En primer lugar, ¿debo ejecutar la solución AppleScript o bash one?
- ¿De qué otra manera se puede mejorar la solución preferida? Para la solución AppleScript, necesito encontrar una manera de eliminar la extensión de archivo de
((finderSelList)'s (item i)'s name)
, y también eliminar el.
final cuando se trata de carpetas. Para la solución de bash, las salidas fileName y fileExt, especialmente para las carpetas, pueden ser inesperadas y desordenadas.